¿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&nbsp;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