constexpr vs const vs constexpr const

const-vs-constexpr-on-variables

Lo que dice el chico sobre constexpr es correctoif double se usa (ofloat por supuesto). Sin embargo, si cambia el tipo var dedouble a un tipo entero como int, char, etc., todo funciona. ¿Por qué sucede eso?

http://ideone.com/DAWABE

int main() 
{
    const int PI1 = 3;
    constexpr int PI2 = 3;
    constexpr int PI3 = PI1;  // works
    static_assert(PI1 == 3, "");  // works

    const double PI1__ = 3.0;
    constexpr double PI2__ = 3.0;
    constexpr double PI3__ = PI1__;  // error
    static_assert(PI1__ == 3.0, "");  // error
    return 0;
}

Update: la siguiente línea fue un error, quise decirPI3__ = PI1__

constexpr double PI3__ = PI1;  // I meant PI1__

Preguntas:

Por quéconst int = 3 es tiempo de compilación constante peroconst double = 3.0 ¿no es?

¿Hay alguna razón por la que debería usarconstexpr const int val; terminadoconstexpr int val? Ambos parecen hacer exactamente lo mismo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta