Допустимо ли использование ссылки на локальную переменную для инициализации переменной constexpr? ⇐ C++
-
Anonymous
Допустимо ли использование ссылки на локальную переменную для инициализации переменной constexpr?
Следующий код компилируется только в 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
Почему?
Следующий код компилируется только в 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
Почему?
Мобильная версия