Постоянные выражения пустых структур?C++

Программы на C++. Форум разработчиков
Anonymous
Постоянные выражения пустых структур?

Сообщение Anonymous »

Следующий код компилируется на всех компиляторах, которые я протестировал до сих пор: < /p>
struct Alignment {
struct Center {
constexpr Center() {}
};
static const Center CENTER;
};

constexpr int foo(Alignment::Center) {
return 42;
}

constexpr int x = foo(Alignment::CENTER);

Обратите внимание, что выравнивание :: center не contexpr здесь. У него даже нет определения, только объявление. Тем не менее, я использую его в качестве аргумента для foo для вычисления contexpr переменная x .
Как только я добавляю член к выравниванию :: center , он не может компилировать:
struct Center {
int n;
constexpr Center(): n(0) {}
};
< /code>
Является ли первый пример действительно действительным в соответствии со стандартом C ++? Какие именно правила здесь? Стандартная гарантия того, что пустые структуры всегда являются постоянными выражениями?struct Center {
int n;
constexpr Center(): n(0) {}
constexpr Center(const Center&): n(0) {}
};


Подробнее здесь: https://stackoverflow.com/questions/797 ... xpressions

Вернуться в «C++»