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