Certos erros no modelo não instanciado não relatado pelo g ++
Considere este exemplo:
class A
{
void foo();
public:
void bar();
};
template <class> class B
{
B()
{
A a;
a.foo(); // 1
A::bar(); // 2
a.bar(1); // 3
}
};
NotaB
nunca é instanciado.
clang++
relata todas as três linhas marcadas como incorretas.g++
(4.8.3) aceita linhas1
e2
e apenas linha de relatórios3
.
E seB
é instanciado,g++
relata alegremente todas as três linhas como errôneas.
Isso é umg++
erro? Alguém poderia pensar que sim.A
não é um nome dependente e seus membros devem ser verificados normalmente no momento da definição do modelo. Existem nuances que não vejo?