Я написал следующий код, скрывающий шаблоны функций-членов.
#include <iostream>
struct A
{
template<int> void func()
{
std::cout<<"Function tamplate of A"<<std::endl;
}
};
struct B : A
{
template<char> void func()
{
std::cout<<"Function tamplate of B"<<std::endl;
}
using A::func;
};
int main()
{
B().func<0>();
}
Эта программа работает в компиляторе Clang. Live demo Clang
Но компилятор GCC дает ошибку двусмысленности. Live demo GCC
source_file.cpp: In function ‘int main()’:
source_file.cpp:22:17: error: call of overloaded ‘func()’ is ambiguous
B().func<0>();
Итак, какой компилятор прав?