提升变体模糊结构

时间:2014-09-12 07:21:18

标签: c++ boost boost-variant

Boost Variant文档说明了接受任意类型的构造函数的以下内容:

template<typename T> variant(T & operand);
  • 要求: T必须明确地转换为其中一种有界类型(即T1,T2等)。

接受const T&T&&的构造函数也是如此。所以我希望下面的代码不会编译:

boost::variant<std::string, bool> v = "text";

但代码编译,v变成了一个bool,这是我绝对不想要的。当然,解决方案是将字符串文字包装在std::string构造函数中。我的问题是:

  1. 为什么这段代码会编译?
  2. 如何选择类型(const char*可转换为std::stringbool)?

1 个答案:

答案 0 :(得分:2)

通常,用户定义的转换会失去对标准转化的重载解析过程。

const char指针到bool的内置转换优先于从const char *std::string的非内置转换(例如,请参阅{ {3}})。

std::string虽然是标准库的一部分,但它不是内置类型,因此只有在转换为内置类型后才会考虑其转换构造函数。

一些参考文献: