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