← index
cplusplus17.Examples/features/template_forward/template_forward.cpp
Source: cplusplus17.Examples/features/template_forward/template_forward.cpp
/* Concept from "C++ Templates the Complete Guide: Second Edition
   Chapter 6
 */


#include<iostream>
#include<utility>

class TypeValue {};

void type(TypeValue &) {
    std::cout << "passed value: TypeValue &c\n";
}

void type(TypeValue &&) {
    std::cout << "passed value: TypeValue &&c\n";
}

void type(const TypeValue &) {
    std::cout << "passed value: const TypeValue &c\n";
}

template<typename T>
void pass(T&& value) {
    type(std::forward<T>(value));
}

int main() {
    TypeValue t1;
    const TypeValue t2;
    pass(t1);// calls &
    pass(t2);// calls const &
    pass(std::move(t1));// calls &&
    return 0;
}