В соответствии с принципом constexpr everything
и введением consteval
в C++20 все больше и больше кода оценивается во время компиляции.
Это приводит к очевидному вопросу: как мы это отлаживаем?
Единственными подсказками в настоящее время являются ошибки компилятора. Но что, если код компилируется, но все равно не делает того, что ожидается. Есть ли инструменты, которые могут помочь в этом? Есть возможность осмотра?
Связанный с этим вопрос: как узнать, какие из них действительно будут «выполняться» во время компиляции, а какие остаются во время выполнения, несмотря на квалификатор.
constexpr
функции можно вызывать в контексте, отличном от constexpr, чтобы вы могли отлаживать их как обычные функции. - person Jarod42   schedule 16.08.2020consteval
. Вы также не можете легко настроить свои функции constexpr для отладки; в то время как вы можете использоватьstd::is_constant_evaluated
, это не поможет воспроизвести любое использование в константных выражениях. - person Davis Herring   schedule 16.08.2020