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

questionAnswers(2)

yourAnswerToTheQuestion