Constructor marcado condicionalmente como explícito
Actualizar: condicional explícito ha llegado al borrador de C ++ 20.más en cppreference
loscppreference std :: página del constructor de tuplas tiene un montón de notas de C ++ 17 que dicen cosas como:
Este constructor esexplicit
si y solo sistd::is_convertible<const Ti&, Ti>::value
es falso para al menos unoi
¿Cómo se puede escribir un constructor que sea condicionalmente explícito? La primera posibilidad que me vino a la mente fueexplicit(true)
Pero esa no es la sintaxis legal.
Un intento conenable_if
no fue exitoso:
// 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) {}
};
con el error:
error: ‘template<class T, class> S::S(T)’ cannot be overloaded
explicit S(T t) {}