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