Por que gcc e clang me permitem construir uma classe abstrata?
O código a seguir é compilado em uma ampla variedade de versões do gcc e do clang - quando compilado e executado com o gcc 5.3.1, ele imprime
UMA()
é interrompido com um erro de chamada virtual pura.
#include <stdio.h>
class A
{
public:
A() {
printf("A()\n");
}
virtual void b() const = 0;
};
int main()
{
const A& a{};
a.b();
return 0;
}
Sei que vincular uma referência a um temporário não é o ideal (embora eupensar esse caso é coberto por algum tipo de extensão vitalícia) - mas também funciona ao tentar chamar um método que usa uma referência const como:
Foo({});
Por conveniência, aqui está um exemplo de como compilar com o clang 3.2:Explorador de Compiladores