Создание абстрактного класса с помощью списка инициализаторов [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 и прекратить.

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

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