Согласно n4487 и другим ссылкам на С++ 17, появится новый спецификатор лямбда-функции - constexpr
, который, если присутствует "явно указывает, что оператор вызова функции является функцией constexpr
.". Я понимаю мотивацию постоянных выражений в лямбдах. Что интересно для меня, это пункт 4 предложения, в котором говорится:
4) Если спецификатор
constexpr
не указан в лямбда-деклараторе, оператор (или шаблон) вызова функции являетсяconstexpr
, если он удовлетворяет требованиям функцииconstexpr
.
Это приводит меня к двум вопросам:
- Зачем нам нужен спецификатор
constexpr
? Похоже, что оператор лямбда-вызова будетconstexpr
или не зависит только от того, будет ли он "удовлетворять требованиям функцииconstexpr
", но не от присутствия спецификатораconstexpr
. - Если допустимо иметь
constexpr
лямбда по умолчанию, почему он не предлагается и для других типов функций - например, глобальных функций? Каким будет влияние, если компилятор начнет рассматривать все функции, которые покрывают требования какconstexpr
?