更新: 条件付き明示が C++20 ドラフトに組み込まれました。cppreference の詳細
cppreference std::tuple コンストラクター ページには、次のような C++17 のメモがたくさんあります。
このコンストラクターは、少なくとも 1 つが false である
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) {}