在下文中,结构Y
重载X
的成员函数f
。两个重载都是模板函数,但采用不同的参数(typename
和int
),以明确指定:
struct X
{
template <typename> static bool f() { return true; }
};
struct Y : public X
{
using X::f;
template <int> static bool f() { return false; }
};
int main()
{
std::cout << Y::f <void>() << " " << Y::f <0>() << std::endl;
}
1 0
正如预期的那样,这使用 gcc 打印。然而,clang (3.3) 抱怨说
[...] error: no matching function for call to 'f'
std::cout << Y::f <void>() << " " << Y::f <0>() << std::endl;
^~~~~~~~~~~
[...] note: candidate template ignored: invalid explicitly-specified argument
for 1st template parameter
template <int> static bool f() { return false; }
^
即,只能看到Y
的版本。我试过了
using X::template f;
相反,没有成功。非静态(模板)成员函数也是如此。那么这是一个错误吗?