只要某些表达式未定义(例如,类型t
的x
不是
std::cout
)。有点像
template<typename t>
auto f(const t &x)
-> typename enable_if_undefined<decltype(std::cout << x)>::type;
使用 SFINAE,我只知道在定义了表达式时如何启用,但不知道在未定义表达式时如何启用。
最佳答案
你需要一个助手来提供一个你可以反转的 bool 值:
template<typename, typename=void>
struct has_cout
: std::false_type {};
template<typename T>
struct has_cout<T, decltype(std::cout << std::declval<T>(),void())>
: std::true_type {};
template<typename T>
auto f(const T& x)
-> typename std::enable_if<!has_cout<T>::value>::type;
关于c++ - 每当表达式未定义时,在 C++ 中启用函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30056790/