是否存在允许method1
在类之外定义的语法,或者这是否不符合 SFINAE 友好标准?
#include <type_traits>
template <int TClass>
struct SampleClass {
// This definition compiles just fine
template <int TMethod = TClass>
typename std::enable_if<TMethod == 0, void>::type
method0() {}
// Declaration
template <int TMethod = TClass>
typename std::enable_if<TMethod == 1, void>::type
method1();
};
// This does not compile
template <int TClass>
template <int TMethod = TClass>
typename std::enable_if<TMethod == 1, void>::type
SampleClass<TClass>::method1() {}
int main() { return 0; }
使用GCC 10.2.1,错误:
foo.cpp:20:30: error: default argument for template parameter for class enclosing 'typename std::enable_if<(TMethod == 1), void>::type SampleClass<TClass>::method1()'
20 | SampleClass<TClass>::method1() {}
| ^