В вопросе Переопределение lambdas не разрешено в С++ 11, почему?, была предоставлена небольшая программа, которая не компилируется:
int main() {
auto test = []{};
test = []{};
}
На вопрос был дан ответ, и все было хорошо. Затем пришел Йоханнес Шауб и сделал интересное наблюдение:
Если вы ставите
+
перед первой лямбдой, она волшебным образом начинает работать.
Итак, мне любопытно: Почему работает следующая работа?
int main() {
auto test = +[]{}; // Note the unary operator + before the lambda
test = []{};
}
Он компилируется с помощью GCC 4.7+ и Clang 3.2+. Соответствует ли стандарт кода?