考虑以下代码:
struct Test {
template <int S>
bool call();
};
template <>
bool Test::call<0>() {
return false;
}
template <>
bool Test::call<1>() {
return true;
}
template <int S, typename T>
static void func(T& t) {
t.call<S>();
}
int main()
{
Test t;
func<0>(t);
}
我得到一个编译错误:
a.cpp: In function ‘void func(T&)’:
a.cpp:19:15: error: expected primary-expression before ‘)’ token
a.cpp: In instantiation of ‘void func(T&) [with int S = 0; T = Test]’:
a.cpp:25:14: required from here
a.cpp:19:5: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator<’
如果我把t.call<0>()
或t.call<1>()
放在main()
函数中,它工作正常。有人能告诉我为什么模板参数推导不适用于这段代码吗?我不确定为什么在这种情况下传入具有部分专用模板成员函数的类型不起作用。