Constructor bedingt als explizit markiert

Aktualisieren conditional explicit hat es in den C ++ 20-Entwurf geschafft.mehr auf cppreference

Dascppreference std :: tuple constructor page hat eine Reihe von C ++ 17-Notizen, die Dinge sagen wie:

Dieser Konstruktor istexplicit dann und nur dann, wennstd::is_convertible<const Ti&, Ti>::value ist für mindestens ein @ falsi

Wie kann man einen Konstruktor schreiben, der bedingt explizit ist? Die erste Möglichkeit, die mir in den Sinn kam, warexplicit(true) aber das ist keine legale Syntax.

Ein Versuch mitenable_if war nicht erfolgreich

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

mit dem Fehler:

error: ‘template<class T, class> S::S(T)’ cannot be overloaded
explicit S(T t) {}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage