Этот вопрос касается: template<class...Types> class variant
:
Согласно variable.variant / 3 , экземпляр программы variant
без аргументов шаблона имеет неправильную форму.
Пока все ясно.Теперь у меня есть вопрос, касающийся конструктора преобразования (template<class T> constexpr variant(T&& t) noexcept(see below)
):
variable.variant / variable.ctor-16.1 говорит, что конструктор преобразования не должен участвовать в разрешении перегрузки, если только:
sizeof ... (Типы) не равен нулю
(... и некоторые другие требования, которые меня сейчас не волнуют).
MyВопрос в том, когда variant
без аргументов шаблона уже делает мою программу плохо сформированной, почему все еще заботится о том, участвует ли мой конвертирующий конструктор в разрешении перегрузки или нет?
Посмотрите на MSVC и libstdc ++ -реализация variant
они фактически имеют enable_if_t<sizeof...(_Types) != 0>
в объявлении конструктора преобразования.Почему?