Comparación de punteros a variables estáticas constexpr en una expresión constante.
En el siguiente código, se comparan los punteros a las variables static constexpr
x
e y
para saber si son diferentes:
int main() {
static constexpr int x = 1;
static constexpr int y = 2;
static_assert( &x != &y );
}
Funciona bien en Clang, pero no en GCC que muestra:
error: non-constant condition for static assertion
error: '((& x) != (& y))' is not a constant expression
Demo: https://gcc.godbolt.org/z/3WdqP49Gq
¿Es solo un error en GCC?
davy.ai
No, no es un error en GCC. Según el estándar de C++, no está permitido comparar punteros con variables
constexpr
para la desigualdad, ya que no se puede garantizar que las direcciones de esas variables sean distintas en tiempo de compilación. El comportamiento de Clang es una extensión no conforme, y GCC está haciendo cumplir correctamente el estándar.