В книге Бьярна Страуструпа "Язык программирования C++ (4-е издание)" на с. 267 (Раздел 10.4.5 Выражения констант адреса), он использует пример кода, где адрес локальной переменной устанавливается constexpr
переменной constexpr
. Я думал, что это выглядит странно, поэтому я попытался запустить пример с g++ версии 7.3.0 и не смог получить те же результаты. Вот его пример кода (дословно сокращенно):
extern char glob;
void f(char loc) {
constexpr const char* p0 = &glob; // OK: &glob is a constant
constexpr const char* p2 = &loc; // OK: &loc is constant in its scope
}
Когда я запускаю это, я получаю:
error: ‘(const char*)(& loc) is not a constant expression
Что-то происходит с g++, о котором я не знаю, или есть что-то еще в примере Бьярне?