Пересылка аргумента в C++
Исходную категорию значения внутри шаблона со ссылкой пересылки восстанавливает std::forward.
Две перегрузки приемника - для lvalue
и rvalue - показывают, какая ветка
сработала.
Запишем цепочку шаблона и приемника:
#include <iostream>
#include <utility>
void sink(int& x) {
std::cout << "lvalue\n";
}
void sink(int&& x) {
std::cout << "rvalue\n";
}
template<typename T>
void pass(T&& x) {
sink(std::forward<T>(x));
}
int main() {
int n = 1;
pass(n);
pass(2);
return 0;
}
Добавьте перегрузку sink(const int&),
печатающую "const lvalue\n".
Передайте константную переменную через
pass и выведите метку ветки.
Оберните вызов sink в шаблон
template<typename T> void relay(T&& x)
с std::forward.
Передайте временное целое и выведите
метку rvalue-ветки.