Конструктор условно помечен явным
Обновить: условный явный сделал это в проекте C ++ 20.больше о cppreference
cppreference std :: страница конструктора кортежей имеет кучу заметок C ++ 17, говорящих о таких вещах, как:
Этот конструкторexplicit
если и только еслиstd::is_convertible<const Ti&, Ti>::value
ложно хотя бы для одногоi
Как можно написать конструктор, который является явно явным? Первая возможность, которая пришла в голову, былаexplicit(true)
но это не юридический синтаксис.
Попытка сenable_if
был неудачным:
// 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) {}
};
с ошибкой:
error: ‘template<class T, class> S::S(T)’ cannot be overloaded
explicit S(T t) {}