Почему static_assert внутри класса не срабатывает?
Почему этот код компилируется?
template<class T>
struct A {
static_assert(sizeof(T) == 5);
};
A<int>* a;
Источник: Stack Overflow на русском
Почему этот код компилируется?
template<class T>
struct A {
static_assert(sizeof(T) == 5);
};
A<int>* a;
Видимо потому, что для создания указателя тело класса (и вообще наличие определения класса) неважно.
Если написать просто A<int> a;
, то все срабатывает.
Это еще одна причина (кроме делания класса SFINAE-friendly) использовать requires
:
template <class T> requires(sizeof(T) == 5)
struct A {...};