Почему функции constexpr, возможно, неправильно сформированы, NDR (10.1.5)? - PullRequest
1 голос
/ 07 мая 2020

В параграфе 10.1.5 говорится, что программа плохо сформирована, c диагностики не требуется, если функция объявлена ​​constexpr, но не существует набора аргументов, которые делают ее доступной для оценки во время компиляции.

Каково объяснение этого?

Поскольку компилятор не может проверить это предварительное условие, как он может извлечь выгоду из этого правила? Однако единственная альтернатива, которую я бы увидел, - это объявить такие программы правильно сформированными (и поэтому практически не применять constexpr, делая это скорее своего рода намеком для компилятора и читателя). Но разве это не было бы предпочтительнее наличия большего количества UB в C ++ со всеми его нежелательными последствиями? Может быть, constexpr - это на самом деле идёт в неправильном направлении ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...