Почему static_assert внутри класса не срабатывает?

Почему этот код компилируется?

template<class T>
struct A {
    static_assert(sizeof(T) == 5);
};

A<int>* a;

Ответы (1 шт):

Автор решения: HolyBlackCat

Видимо потому, что для создания указателя тело класса (и вообще наличие определения класса) неважно.

Если написать просто A<int> a;, то все срабатывает.


Это еще одна причина (кроме делания класса SFINAE-friendly) использовать requires:

template <class T> requires(sizeof(T) == 5)
struct A {...};
→ Ссылка