шаблон является своего рода макросом в общем смысле этого слова, поэтому, если вы "разверните" FileB::fun(f);
T, будет заменен типом f , являющимся FileA::Foo
и это похоже на то, что если у вас есть:
void fun(FileA::Foo& obj)
{
std::cout << FileA::Foo::ENTRY << "\n";
obj.callme();
}
, поскольку FileA::Foo::ENTRY
равно 0, std :: cout записывает 0, то вы применяете FileA::Foo::callme()
, чьи отпечатки Foo
Предупреждение, шаблон намного больше, это просто очень упрощенное объяснение того, как этот пример работает и производит выходные данные, не воспринимайте его буквально, пожалуйста ^^