Cómo tener alias "constexpr y runtime"

Constexpr puede ser impresionante y útil para la optimización de la compilación. Por ejemplo...

strlen(char*)

Se puede precompilar usando ...

constexpr inline size_t strlen_constexpr(char* baseChar) {
    return (
            ( baseChar[0] == 0 )
            ?(// if {
              0
              )// }
            :(// else {
              strlen_constexpr( baseChar+1 ) + 1 
              )// }
            );
}

Lo que le da un costo de tiempo de ejecución"0" cuando está optimizado ... Pero es más de 10 + x más lento en tiempo de ejecución

// Test results ran on a 2010 macbook air
--------- strlen ---------
Time took for 100,000 runs:1054us.
Avg Time took for 1 run: 0.01054us.
--------- strlen_constexpr ---------
Time took for 100,000 runs:19098us.
Avg Time took for 1 run: 0.19098us.

¿Hay algún hack de macro / plantilla existente donde se pueda usar una sola función unificada en su lugar? es decir.

constexpr size_t strlen_smart(char* baseChar) {
    #if constexpr
    ... constexpr function
    #else its runtime
    ... runtime function
}

O algún hack de sobrecarga que permitiría lo siguiente

constexpr size_t strlen_smart(char* baseChar) {
    ... constexpr function
}

inline size_t strlen_smart(char* baseChar) {
    ... runtime function
}

Nota: Esta pregunta se aplica al concepto en general. De tener 2 funciones separadas para runtime y constexpr en lugar de las funciones de ejemplo dadas.

Renuncia: Establecer el compilador en -O3 (nivel de optimización) es más que suficiente para arreglar el 99.9% de las optimizaciones de caracteres estáticos, haciendo que todos los ejemplos anteriores sean "inútiles". Pero eso no viene al caso de esta pregunta, ya que se aplica a otros "ejemplos", y no solostrlen.

Respuestas a la pregunta(1)

Su respuesta a la pregunta