Кажется, он пытается принудительно использовать функцию, используемую только во время компиляции, согласно этому комментарию в другой функции библиотеки:
// convenience function for inferring the string size and ensuring no
// accidental runtime encryption
template <uint64_t S, size_t N>
constexpr encrypted_string<S, N> make_encrypted_string(const char(&s)[N])
{
return true ? encrypted_string<S, N>(s) :
throw err::strenc_runtime_error;
}
Однако, как вы указываете, здесь ничего не происходит. Как правило, этот трюк с троичным оператором в функциях constexpr
используется для запуска ошибок времени компиляции с заданным условием - чтобы не гарантировать, что все вызовы функции являются константными выражениями. См. ошибка constexpr во время компиляции, но не издержки во время выполнения для объяснения этого паттерна.
Если вам нужно убедиться, что результат был обнаружен во время компиляции, вы можете легко присвоить результат переменной constexpr
:
constexpr int result = strlen("asd");