Как получить псевдоним «constexpr and runtime»

Constexpr может быть полезен для оптимизации компиляции. Например...

strlen(char*)

Может быть скомпилирован с использованием ....

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

Что дает ему стоимость времени выполнения "0" при оптимизации ... Но более чем в 10 раз медленнее во время выполнения

// 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.

Существуют ли какие-либо макросы / шаблоны, где вместо них можно использовать одну унифицированную функцию? то есть.

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

Или какой-то перегрузочный хак, который позволил бы следующее

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

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

Замечания: Этот вопрос относится к концепции в целом. Наличие двух отдельных функций для времени выполнения и constexpr вместо приведенных в качестве примера функций.

Отказ от ответственности: Установка компилятора на -O3 (уровень оптимизации) более чем достаточна, чтобы исправить 99,9% статических оптимизаций символов, выполнив все приведенные выше примеры "бессмысленно», Но это'суть этого вопроса, как это относится к другим "Примеры"и не только.strlen

Ответы на вопрос(1)

Ваш ответ на вопрос