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?

questionAnswers(2)

yourAnswerToTheQuestion