Ответ 1
В разделе 5.1.2 параграфа 5 указано, что вы не можете иметь значения по умолчанию для параметров.
Аргументы по умолчанию (8.3.6) не должны указываться в объявлении параметра-объявления lambda-declarator.
У меня была эта лямбда где-то в моем коде:
[](bool a, bool=true){ return !a;} }
и GCC 4.6 "жаловались" на это предупреждение:
warning: default argument specified for lambda parameter [-pedantic]
Это очень бесполезно, когда вы не знаете, почему это "плохо". Я консультировался с FDIS n3290 и не нашел ничего в 5.1.2 Lambda Expressions
в отношении аргументов по умолчанию и лямбда.
ОБНОВЛЕНИЕ: Я отправил отчет об ошибке здесь.
UPDATE2: Хорошо, теперь я использую -pedantic-errors
. -pedantic
генерирует предупреждения, а не ошибки.
В разделе 5.1.2 параграфа 5 указано, что вы не можете иметь значения по умолчанию для параметров.
Аргументы по умолчанию (8.3.6) не должны указываться в объявлении параметра-объявления lambda-declarator.
Так как С++ 14 разрешено. Было обнаружено, что это был дефект давным-давно: Аргументы по умолчанию для lambdas, а также Аргументы по умолчанию в лямбда-выражениях.
Нет смысла иметь аргумент по умолчанию в лямбда-функции - как его можно использовать? С другой стороны, это не наносит вреда, так почему бы не позволить это после предупреждения?