Почему 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 {...};