Как написать общую пересылку lambda в С++ 14?
Попробуйте # 1
[](auto&& x) { return x; }
Внутри тела функции x
является lvalue, поэтому это не работает.
Попробуйте # 2
[](auto&& x) { return std::forward<decltype(x)>(x); }
Это правильно пересылает ссылки внутри лямбда, но всегда будет возвращаться по значению (если компилятор не возвращает копию).
Попробуйте # 3
[](auto&& x) -> decltype(x) { return std::forward<decltype(x)>(x); }
Возвращает тот же тип, что и аргумент (возможно, -> auto&&
тоже работает) и работает нормально.
Попробуйте # 4
[](auto&& x) noexcept -> decltype(x) { return std::forward<decltype(x)>(x); }
Добавляет ли noexcept
эту лямбду более применимую и, следовательно, строго лучше, чем # 3?