- Notifications
You must be signed in to change notification settings - Fork 75
/
Copy pathdeduce.cxx
42 lines (33 loc) · 714 Bytes
/
deduce.cxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include<iostream>
#include<utility>
template<typename... Ts>
structtuple {
Ts ...m;
};
template<typename T1>
voidf1(T1&& x) {
std::cout<< " f1: "<< T1.string<< "\n";
}
template<typename T2, typename... Args>
voidf2(T2&& y : tuple<Args...>) {
std::cout<< " f2: "<< T2.string<<" | Args: ";
std::cout<< Args.string<< ""...;
std::cout<< "\n";
}
structderived_t : tuple<int, char, void*> { };
intmain() {
derived_t d1;
constderived_t d2;
std::cout<< "lvalue:\n";
f1(d1);
f2(d1);
std::cout<< "const lvalue:\n";
f1(d2);
f2(d2);
std::cout<< "xvalue:\n";
f1(std::move(d1));
f2(std::move(d1));
std::cout<< "const xvalue:\n";
f1(std::move(d2));
f2(std::move(d2));
}