Estaba tratando de descubrir algunos de los beneficios del nuevo estándar C++ 11 (usando g ++ 4.6.2) . Jugando con lambdas en una función de algoritmo "all_of", encontré un extraño problema con el calificador std ::.C++ 11/g ++: std :: calificador requerido en lambda, aunque se usa "using namespace std"
Estoy "usando" el espacio de nombres estándar como se muestra al principio del fragmento de código. Esto hace que la declaración del par variable en el bucle for sea bien definida.
Sin embargo, probé lo mismo en el argumento lambda utilizado en el algoritmo "all_of". Me encontré con varios mensajes de error difíciles de entender, antes de darme cuenta de que un std :: pair full std :: qualified funcionaría allí, pero solo el par no.
¿Me está faltando un punto importante? La declaración de la lambda ocurre en este archivo, por lo que el espacio de nombres todavía debe estar activo aquí, ¿verdad? ¿O el std :: qualifier requerido depende de algún código STL en un archivo diferente? ¿O es probable que sea un error en g ++?
Saludos, Peter
PD: el código se compila sin advertencias como pegar aquí, pero la eliminación de la std :: lambda en el all_of, me sale un mensaje de error.
#include <iostream>
#include <memory>
#include <map>
#include <string>
#include <algorithm>
#include <utility>
using namespace std;
void duckburg() {
const int threshold = 100;
map <string, int> money;
money["donald"] = 200;
money["daisy"] = 400;
money["scrooge"] = 2000000;
// obviously, an "auto" type would work here nicely,
// but this way my problem is illustrated more clearly:
for (const pair <string, int> &pair : money) {
cout << pair.first << "\t" << pair.second << endl;
}
if (all_of(money.begin(), money.end(),
[&](std::pair<string, int> p) {
return bool(p.second > threshold);
}))
{
cout << "yes, everyone is rich!";
} else {
cout << "no, some are poor!";
};
}
Editar: Recién notado He recibido un voto negativo para esta vieja pregunta. No hay problema con eso, pero por favor amplíe las razones. Me ayudará a mejorar las preguntas futuras y, al final, toda la comunidad se beneficiará. ¡Gracias!
Suena como un error en GCC, compila bien con MSVC 10. No se puede probar con Clang, ya que aún no implementan lambdas. FWIW, GCC 4.5.1 no tiene problemas con [este código minimizado] (http://ideone.com/LdGJT). – Xeo
sí, habría probado con/sin el estándar mencionado: en Clang, pero por ahora es imposible debido a las lambdas que faltan. – Piotr99
Debe crear una versión con todo el código innecesario eliminado y proporcionar el mensaje de error. – Mankarse