Следующий код компилируется в широком диапазоне версий 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;
}
Я понимаю, что привязка ссылки к временному не идеальна (хотя я думаю, что этот случай покрывается каким-то расширением жизни), но он также работает при попытке вызвать метод, который принимает ссылку на const, например:
Foo({});
Для удобства здесь приведен пример его компиляции с помощью clang 3.2: Проводник компилятора