Bestimmte Fehler in unbegründeten Vorlagen, die von g ++ nicht gemeldet wurden

Betrachten Sie dieses Beispiel:

class A
{
  void foo();
  public:
  void bar();
};

template <class> class B
{
  B()
  {
    A a;
    a.foo();    // 1
    A::bar();   // 2
    a.bar(1);   // 3
  }
};

HinweisB wird nie instanziiert.

clang++ meldet alle drei markierten Zeilen als fehlerhaft.g++ (4.8.3) akzeptiert Zeilen1 und2 und nur meldet Zeile3.

WennB ist instanziiert,g++ meldet glücklich alle drei Zeilen als fehlerhaft.

Ist das eing++ Fehler? Das würde man meinen.A ist kein abhängiger Name und seine Mitglieder sollten normalerweise zum Zeitpunkt der Vorlagendefinition überprüft werden. Gibt es Nuancen, die ich nicht sehe?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage