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