なぜ次のように印刷されるの"A boolean!"
ですか?std :: stringを明示的に作成すると正しい動作が得られるため、奇妙な変換が行われていることに気付きました。visitor::operator()(bool)
しかし、次の場合に過負荷解決が選択されるのはなぜですか?
#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;
}
Visual Studio 2012を実行しています(CTPまたは同じ結果が得られない)