Pourquoi le code suivant affiche-t-il "A boolean!"
? Je me rends compte qu'une conversion bizarre est en cours, car si je construis explicitement une chaîne std :: string, j'obtiens le bon comportement. Mais pourquoi la résolution de surcharge choisit-elle visitor::operator()(bool)
dans le cas suivant?boost :: variante visiteur choisit la mauvaise surcharge
#include <boost/variant.hpp>
#include <string>
typedef boost::variant<bool, std::string> type;
struct visitor : public boost::static_visitor<> {
void operator()(bool b) const {
std::cout << "A boolean!" << std::endl;
}
void operator()(const std::string& str) const {
std::cout << "A string!" << std::endl;
}
};
int main(int argc, char* argv[]) {
type t = "I am a string";
t.apply_visitor(visitor());
return 0;
}
J'exécute Visual Studio 2012 (CTP ou donne pas le même résultat)
FTR le membre 'apply_visitor' ne fait pas partie de l'interface publique. Vous êtes censé utiliser la version autonome: 'apply_visitor (visitor(), t)'. –
Merci @LucDanton. Manqué que quand je lis la documentation –