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?