Предположим, что у вас есть функция, которая генерирует токен безопасности для вашего приложения, такой как некоторая соль хэшей, или, может быть, симметричный или асимметричный ключ.
Теперь скажем, что у вас есть эта функция в С++ как constexpr и что вы создаете ключи для своей сборки на основе некоторой информации (например, номер сборки, отметка времени, что-то еще).
Вы, будучи добросовестным программистом, удостоверяетесь и вызываете это соответствующим образом, чтобы убедиться, что он вызван только во время компиляции, и, таким образом, мертвый стриппер удаляет код из окончательного исполняемого файла.
Тем не менее, вы никогда не можете быть уверены, что кто-то другой не будет называть его небезопасным способом, или что, возможно, компилятор не отключит эту функцию, а затем ваш алгоритм маркера безопасности станет общедоступным, что делает его более легким, чтобы нападавшие угадали будущие токены.
Или, в безопасности, скажем, что функция занимает много времени, и вы хотите удостовериться, что она никогда не происходит во время выполнения и вызывает плохой пользовательский интерфейс для ваших конечных пользователей.
Есть ли способ гарантировать, что функция constexpr никогда не будет вызвана во время выполнения? Или поочередно, бросать утверждение или подобное во время выполнения было бы хорошо, но не так идеально, как ошибка компиляции.
Я слышал, что существует какой-то способ включения типа исключения, которого не существует, так что если функция constexpr не будет отключена, вы получите ошибку компоновщика, но слышали, что это работает только некоторые компиляторы.
Дистанционно связанный вопрос: Принудительно constexpr оценивается во время компиляции