【发布时间】:2017-03-08 10:37:27
【问题描述】:
这是我想要实现的 MCVE:
#include <limits>
#include <iostream>
// enable_if (I'm stuck with a c++98 compiler)
template<bool B, class T = void> struct enable_if {};
template<class T> struct enable_if<true, T> { typedef T type; };
// sfinae
template<typename T> const char*
f(typename enable_if<std::numeric_limits<T>::is_integer, T>::type t) { return "sfinae"; }
template<typename T> const char*
f(T t) { return ""; }
// test
int main()
{
std::cout << f(3) << "\n"; // returns an empty string
std::cout << f(3.0) << "\n"; // returns an empty string
}
我期待对f(3) 的调用返回"sfinae"。我做错了什么?
要调用第一个版本,我必须手动调用f<int>(3)。我很困惑。
【问题讨论】: