Здравствуйте, 00011011, Вы писали:
0>Я смотрю как сделана аналогичная фича в языке Zig, там все просто и гениально. И на фоне этого то как сделано в С++ становится совсем непонятным, почему так и чем руководствовались авторы этого constexpr?
constexpr выступает в роли контракта, который дает клиентам функции гарантии того, что функция может быть вычислена в compile time.
Допустим constexpr'а бы не было. Скажем ты используешь функцию факториала из некоторой библиотеки в compile time контексте. У функции простая реализация, поэтому все работает, все ок. Потом выходит новая версия библиотеки в которой реализация факториала изменилась ( ну не знаю, ассемблерные вставки скажем добавились ) и теперь в compile-time она вычислена быть не может. Твой код сломается при попытке перейти на новую версию. Не уверен, что ты хотел бы подобного развития событий. А вот наличие constexpr как раз исключает возможность возникновения этой ситуации.