Почему gcc и clang позволяют мне создавать абстрактный класс?

Следующий код компилируется в широком диапазоне версий gcc и clang - при компиляции и запуске с gcc 5.3.1 он печатает

А ()

затем прерывается с чистой ошибкой виртуального вызова.

#include <stdio.h>

class A
{
public:
    A() {
        printf("A()\n");
    }
    virtual void b() const = 0;
};

int main()
{
    const A& a{};
    a.b();
    return 0;
}

Я понимаю, что привязка ссылки к временному не идеальна (хотя ясчитать этот случай покрывается каким-то расширением продолжительности жизни), но он также работает при попытке вызвать метод, который принимает константную ссылку, такую ​​как:

Foo({});

Для удобства вот пример компиляции с помощью clang 3.2:Проводник компилятора

Ответы на вопрос(1)

Ваш ответ на вопрос