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