在阅读sfinae on member function defined outside of class body之后的问题(这是不一样的问题)和其他问题之后,我仍然没有在使用a时在类声明之外定义成员函数体的好方法SFINAE方法仅使用算术类型启用类。
std::chrono::time_point<std::chrono::system_clock, std::chrono::seconds>
在此示例中,我收到错误:
#include <type_traits>
template <typename T,typename = typename std::enable_if<std::is_arithmetic<T>::value,T>::type>
class foo
{
public:
void bar();
};
template <typename T>
void foo<T>::bar ()
{
}
然而,如果我这样声明:
error: invalid use of incomplete type 'class foo<T>'
void foo<T>::bar ()
^
error: declaration of 'class foo<T>'
class foo
^
它可以毫无困难地运作。
我正在使用mingw-w64(w64 3.3)编译此代码。
答案 0 :(得分:2)
foo
有两个模板参数,即使其中一个未命名,默认并用于SFINAE。因此:
template <typename T, typename U>
void foo<T, U>::bar ()
{
}