Создание абстрактного класса с помощью списка инициализаторов [duplicate]
На этот вопрос уже есть ответ здесь:
Почему gcc и clang позволяют мне создавать абстрактный класс? 1 ответЯ хотел бы понять, почему компилятор позволяет компилировать следующий код
#include <iostream>
struct A
{
A()
{
std::cout << "A::A\n";
}
virtual void f() const = 0;
};
void g(const A& a)
{
a.f();
}
int main()
{
g({});
}
Это даже выводитA::A
когда беги.
Если я заменюg({})
сg(A())
это, очевидно, не компилируется. Жалуется чтоA
является абстрактным и не может быть создан. И Clang, и GCC компилируют этот штраф без каких-либо предупреждений. При запуске обеих версий распечататьpure virtual method called
и прекратить.