Ciertos errores en la plantilla desinstalada no informados por g ++
Considere este ejemplo:
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 se instancia.
clang++
informa que las tres líneas marcadas son erróneas.g++
(4.8.3) acepta líneas1
y2
y solo reporta línea3
.
SiB
se instancia,g++
felizmente informa que las tres líneas son erróneas.
Esto es ung++
¿error? Uno pensaría que sí.A
no es un nombre dependiente y sus miembros deben verificarse normalmente en el momento de la definición de la plantilla. ¿Hay matices que no veo?