Следующие компиляции и запуска (в версии Apple LLVM версии 6.1.0 и Visual С++ 2015):
#include <functional>
#include <iostream>
struct s { int x; };
int main(int argc, char **argv)
{
std::function<void (s &&)> f = [](const s &p) { std::cout << p.x; };
f(s {1});
return 0;
}
Почему присваивание std::function<void (s &&)> f = [](const s &p) { std::cout << p.x; };
не генерирует ошибку? Функция, принимающая ссылку rvalue, не должна иметь такую же подпись, как функция, принимающая ссылку const lvalue, если она? Удаление const
из лямбда-декларации приводит к ошибке, как ожидалось.