В документации Boost Variant говорится следующее о конструкторе, который принимает произвольный тип:
template<typename T> variant(T & operand);
- Требования: T должен однозначно преобразовываться в один из ограниченных типов (например, T1, T2 и т. д.).
То же самое относится и к конструкторам, принимающим const T&
и T&&
. Поэтому я ожидаю, что следующий код не будет компилироваться:
boost::variant<std::string, bool> v = "text";
Но код компилируется, и v
становится логическим, чего мне определенно не хотелось. Конечно, решение состоит в том, чтобы обернуть строковый литерал в конструктор std::string
. Мой вопрос:
- Почему этот код компилируется?
- Как он выбирает тип (поскольку
const char*
можно преобразовать как вstd::string
, так и вbool
)?
v = "test"s;
- person sehe   schedule 12.09.2014