Для компилятора есть место, чтобы решить не оценивать во время компиляции, если он считает, что что-то "слишком сложно".Это в тех случаях, когда не обязательно проводить оценку для генерации правильной программы, которая действительно может быть запущена (как указывает @MSalters).
Я подумал, что, возможно, решение, касающееся лени во время компиляции, будетбыть пределом глубины рекурсии.(Это предлагается в спецификации как 512, но вы можете увеличить его с помощью флага командной строки -fconstexpr-depth
, если вы этого хотите.) Скорее, это будет контролировать его отказ в любых случаях ... даже когда постоянная времени компиляциинеобходимо было запустить программу.Так что это никак не повлияет на ваше дело.
Кажется, если вы хотите гарантию в коде, что он будет выполнять оптимизацию, тогда вы нашли способ для этого.Но если constexpr-depth
не может помочь, я не уверен, есть ли какие-либо соответствующие флаги компилятора в противном случае ...