¿Hay casos en los que se deba evitar el uso de constexpr, incluso si pudiera usarse?

Si se declara un objetoconst, se garantiza que su valor estará disponible solo en tiempo de ejecución, pero si se declaraconstexpr, se garantiza que el valor estará disponible tanto durante la compilación como en el tiempo de ejecución. Entonces, si tengo un objeto cuyo valor está disponible durante la compilación, ¿hay alguna situación en la que no deba declararlo?constexpr?

const int magicValue = 42;      // Does this ever make sense
                                // (using const instead of constexpr)?

Para las funciones, si una función puede devolver un valor computado durante la compilación cuando se pasan argumentos con valores disponibles durante la compilación, ¿tendría sentido alguna vez no declarar la función?constexpr?

struct Point { int x; int y; };

Point midPoint(Point p1, Point p2)                       // Does this ever make
{                                                        // sense (not declaring
    return { (p1.x + p2.x) / 2 , (p1.y + p2.y) / 2 };    // the function
}                                                        // constexpr)?

El único caso que puedo concebir es cuando no desea comprometerse a que la función pueda calcular una constante de tiempo de compilación cuando se le llama con argumentos conocidos en tiempo de compilación, por ejemplo, si desea preservar la flexibilidad de cambiomidPointde la implementación sin cambiar su interfaz (por lo tanto, potencialmente interrumpir a los llamadores). Por ejemplo, es posible que desee conservar la flexibilidad para agregarconstexpr efectos secundarios amidPoint, por ejemplo, IO.

Respuestas a la pregunta(2)

Su respuesta a la pregunta