J'essaie de compiler l'extrait de code ci-dessous. Mais il échoue avec:boost :: les expressions de lambda bind ne peuvent pas être liées à la chaîne vide() de la chaîne de caractères
erreur C2665: 'boost :: lambda :: function_adaptor :: apply': aucune des 8 surcharges ne peut convertir tous les types d'argument. La spécification du type de retour lors de l'appel de bind n'aide pas.
Une idée de ce que je fais mal?
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <string>
#include <map>
int main()
{
namespace bl = boost::lambda;
typedef std::map<int, std::string> types;
types keys_and_values;
keys_and_values[ 0 ] = "zero";
keys_and_values[ 1 ] = "one";
keys_and_values[ 2 ] = "Two";
std::for_each(
keys_and_values.begin(),
keys_and_values.end(),
std::cout << bl::constant("Value empty?: ") << std::boolalpha <<
bl::bind(&std::string::empty,
bl::bind(&types::value_type::second, _1)) << "\n");
return 0;
}
ahhh merci. J'ai découvert que boot/bind.hpp était inclus dans mon projet. Une fois que j'ai enlevé l'inclure, ça a bien fonctionné. Je ne sais pas pourquoi cela ne m'a pas donné une erreur plus descriptive. – navigator
@navigator oui, je suis tombé dessus moi-même. boost bind met _1 dans un espace de nom anonyme qui provoque toutes sortes de confusion avec lambda – Anycorn