Perché la seguente stampa è "A boolean!"
? Mi rendo conto che ci sono alcune strane conversioni in corso, dal momento che se costruisco in modo esplicito uno std :: string ottengo il comportamento corretto. Ma perché la risoluzione del sovraccarico sceglie visitor::operator()(bool)
nel seguente caso?boost :: variante visitatore sceglie il sovraccarico errato
#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;
}
Sono in esecuzione di Visual Studio 2012 (CTP o no dà lo stesso risultato)
FTR il membro 'apply_visitor' non fa parte dell'interfaccia pubblica. Dovresti usare la versione indipendente: 'apply_visitor (visitor(), t)'. –
Grazie a @LucDanton. Mi è mancato quando ho letto la documentazione –