Почему классы шаблонов позволяют функции-члены, которые не могут компилироваться?
class P
{
};
template< typename P >
class C : public P
{
public:
void f()
{
P::f();
}
};
int main() {
C<P> c1;
return 0;
}
На случай, если мой вопрос оставит место для недоразумений, вот пример кода. ЕслиC
былоне шаблонный, но унаследованный отP
непосредственно, тогда образец не будет скомпилирован, потому что четко функционируетf()
пытается вызвать функцию в базовом классеP
который не существует.
Однако еслиC
шаблон, то это только подобрано, еслиf()
на самом деле называется.
Я хотел бы знать, почему есть такая разница. В обоих случаяхf()
в любом случае был бы мертвым кодом и удален, но программа не была сформирована в не шаблонном сценарии.