Construtor marcado condicionalmente como explícito
Atualizar: explícito condicional entrou no rascunho do C ++ 20.mais sobre cppreference
opágina do construtor cppreference std :: tuple tem um monte de notas em C ++ 17 dizendo coisas como:
Esse construtor éexplicit
se e apenas sestd::is_convertible<const Ti&, Ti>::value
é falso por pelo menos umi
Como alguém pode escrever um construtor que é condicionalmente explícito? A primeira possibilidade que me veio à mente foiexplicit(true)
mas isso não é sintaxe legal.
Uma tentativa comenable_if
não teve êxito:
// constructor is explicit if T is not integral
struct S {
template <typename T,
typename = typename std::enable_if<std::is_integral<T>::value>::type>
S(T) {}
template <typename T,
typename = typename std::enable_if<!std::is_integral<T>::value>::type>
explicit S(T) {}
};
com o erro:
error: ‘template<class T, class> S::S(T)’ cannot be overloaded
explicit S(T t) {}