При передаче выведенного типа в качестве ссылки на r-значение я получаю универсальную справочную функциональность и могу архивировать идеальную пересылку следующим образом:
template <typename T>
void func(T&& t) {
other_func(std::forward<T>(t));
}
... из-за способа получения T и правил свертывания ссылок стандарта.
Теперь рассмотрим, как other_func принимает функциональный объект.
template <typename T>
void func(T&& t) {
other_func([](int v) { return t + v; }); // I chose addition for example purposes
}
Теперь, очевидно, это не скомпилируется из-за того, что t не был захвачен. Мой вопрос: как мне его зафиксировать, чтобы захваченное значение было тем, к чему выводится T?
Возможно ли это с помощью новых общих лямбда-захватов? А если... как?
[t = std::forward<T>(t)] ?
Я до сих пор не очень понимаю механику новых инициализаторов захвата...