Равные ненулевые указатели на разные переменные в C++C++

Программы на C++. Форум разработчиков
Anonymous
Равные ненулевые указатели на разные переменные в C++

Сообщение Anonymous »

Могут ли указатели на различные переменные быть равными в C++, особенно во время постоянной оценки?
Рассмотрите следующую программу (упрощенную со времени первого издания вопроса):

Код: Выделить всё

constexpr bool f(int * x = nullptr) {
int c = 0;
return x ? (x != &c) : f(&c);
};

static_assert( f() ); //fails in MSVC
Вызов рекурсивной функции f() возвращает true, если указатель на локальную переменную c во вложенном вызове f(&c)< /code> не равен указателю x на одноименную локальную переменную c из вызывающей функции f(nullptr).
В GCC и Clang static_assert проходит, но не в MSVC. Онлайн-демо: https://gcc.godbolt.org/z/Ehn7c7v7f (тот же результат в последней версии Visual Studio 2022).
Это допустимая константная оценка в Visual Studio в соответствии с C++. стандарт?

Подробнее здесь: https://stackoverflow.com/questions/694 ... ables-in-c

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