Boost Variant文档说明了接受任意类型的构造函数的以下内容:
template<typename T> variant(T & operand);
接受const T&
和T&&
的构造函数也是如此。所以我希望下面的代码不会编译:
boost::variant<std::string, bool> v = "text";
但代码编译,v
变成了一个bool,这是我绝对不想要的。当然,解决方案是将字符串文字包装在std::string
构造函数中。我的问题是:
const char*
可转换为std::string
和bool
)?答案 0 :(得分:2)
通常,用户定义的转换会失去对标准转化的重载解析过程。
从const char
指针到bool
的内置转换优先于从const char *
到std::string
的非内置转换(例如,请参阅{ {3}})。
std::string
虽然是标准库的一部分,但它不是内置类型,因此只有在转换为内置类型后才会考虑其转换构造函数。
一些参考文献: