Почему 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:Проводник компилятора