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

Рейтинг: 5Ответов: 1Опубликовано: 25.05.2023

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

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

A<int>* a;

Ответы

▲ 3Принят

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

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


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

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