forked from coders-school/modern-cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbloat.cpp
More file actions
26 lines (20 loc) · 762 Bytes
/
Copy pathbloat.cpp
File metadata and controls
26 lines (20 loc) · 762 Bytes
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
#include <memory>
#include <iostream>
class Gadget {};
void f(const Gadget&) { std::cout << "const Gadget&\n"; }
void f(Gadget&) { std::cout << "Gadget&\n"; }
void f(Gadget&&) { std::cout << "Gadget&&\n"; }
// void use(const Gadget& g) { f(g); } // calls f(const Gadget&)
// void use(Gadget& g) { f(g); } // calls f(Gadget&)
// void use(Gadget&& g) { f(std::move(g)); } // calls f(Gadget&&)
template <typename T>
void use(T&& t) {
f(std::forward<T>(t));
}
int main() {
const Gadget cg;
Gadget g;
use(cg); // calls use(const Gadget&) then calls f(const Gadget&)
use(g); // calls use(Gadget&) then calls f(Gadget&)
use(Gadget()); // calls use(Gadget&&) then calls f(Gadget&&)
}