¿Por qué gcc y clang me permiten construir una clase abstracta?
El siguiente código se compila en una amplia gama de versiones de gcc y clang: cuando se compila y ejecuta con gcc 5.3.1, imprime
UNA()
luego aborta con un error de llamada virtual puro.
#include <stdio.h>
class A
{
public:
A() {
printf("A()\n");
}
virtual void b() const = 0;
};
int main()
{
const A& a{};
a.b();
return 0;
}
Me doy cuenta de que vincular una referencia a un temporal no es ideal (aunque yopensar este caso está cubierto por algún tipo de extensión de por vida), pero también funciona cuando se intenta llamar a un método que toma una referencia constante como:
Foo({});
Por conveniencia, aquí hay un ejemplo de compilación con clang 3.2:Explorador de compiladores