Почему классы шаблонов позволяют функции-члены, которые не могут компилироваться?

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() в любом случае был бы мертвым кодом и удален, но программа не была сформирована в не шаблонном сценарии.

Ответы на вопрос(1)

Ваш ответ на вопрос