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) {}

Respuestas a la pregunta(2)

Su respuesta a la pregunta