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

questionAnswers(1)

yourAnswerToTheQuestion