Допустимо ли использование ссылки на локальную переменную для инициализации переменной constexpr?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Допустимо ли использование ссылки на локальную переменную для инициализации переменной constexpr?

Сообщение Anonymous »


Следующий код компилируется только в GCC (проверено на 10.4 и 13.2 на godbolt.org), но не на Clang (не работает на всех версиях, которые я пробовал, например 17.0.1 на godbolt.org):

struct A { статический constexpr int b{1}; }; int main(int argc, char *argv[]) { А а; А& ареф{а}; constexpr auto bb1{a.b}; constexpr auto bb2{aref.b}; вернуть bb1+bb2; } Выводы Clang:

:9:20: ошибка: переменная constexpr 'bb2' должна быть инициализирована постоянным выражением 9 | constexpr auto bb2{aref.b}; | ^ ~~~~~~~~ :9:24: примечание: инициализатор «aref» не является постоянным выражением. 9 | constexpr auto bb2{aref.b}; | ^ :7:14: примечание: объявлено здесь 7 | А& ареф{а}; | https://godbolt.org/z/nG4j3KefE

Почему?
Ответить

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

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

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

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

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