example3_rvalue_refs_vs_universal_refs.cpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>

// Rvalue reference
void rvalueRef(int&& param) {
    std::cout << "Rvalue reference\n";
}

// Universal reference
template<typename T>
void universalRef(T&& param) {
    std::cout << "Universal reference\n";
}

int main() {
    int x = 42;

    // rvalueRef(x);  // Error: x is an lvalue
    rvalueRef(42);    // OK: 42 is an rvalue

    universalRef(x);  // OK: x is an lvalue
    universalRef(42); // OK: 42 is an rvalue

    return 0;
}
Back to universal_reference