Допустимо ли использование ссылки на локальную переменную для инициализации переменной 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

Почему?

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