es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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.

Comments are closed.