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