При передаче выведенного типа в качестве ссылки на 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)] ?
Я до сих пор не получаю механику новых инициализаторов захвата...