Постоянные выражения пустых структур?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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