Конструктор условно помечен явным

Обновить: условный явный сделал это в проекте 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) {}

Ответы на вопрос(1)

Ваш ответ на вопрос