更新: 条件显式使其成为C++ 20草案.更多关于cppreference
该cppreference的std ::元组构造页面有一堆的C++ 17的笔记说这样的话:
这个构造函数是
explicitif和only ifstd::is_convertible<const Ti&, Ti>::value至少为falsei
如何编写有条件显式的构造函数?想到的第一种可能性是,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) {}
};
Run Code Online (Sandbox Code Playgroud)
有错误:
error: ‘template<class T, class> S::S(T)’ cannot be overloaded
explicit S(T t) {}
Run Code Online (Sandbox Code Playgroud)