#include <iostream>
using namespace std;
struct some_type {};
template<typename T>
void doSomething(T&& model)
{
cout << "reference: " << &model << endl;
}
void test(some_type input_model, bool do_copy)
{
cout << "original: " << &input_model << endl;
if (do_copy)
doSomething( some_type{input_model} ); // T = some_type&&
else
doSomething( input_model ); // T = some_type&
}
int main()
{
test({}, true);
test({}, false);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IHNvbWVfdHlwZSB7fTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgZG9Tb21ldGhpbmcoVCYmIG1vZGVsKQp7Cgljb3V0IDw8ICJyZWZlcmVuY2U6ICIgPDwgJm1vZGVsIDw8IGVuZGw7Cn0KCnZvaWQgdGVzdChzb21lX3R5cGUgaW5wdXRfbW9kZWwsIGJvb2wgZG9fY29weSkKewoJY291dCA8PCAib3JpZ2luYWw6ICIgPDwgJmlucHV0X21vZGVsIDw8IGVuZGw7CglpZiAoZG9fY29weSkKCQlkb1NvbWV0aGluZyggc29tZV90eXBle2lucHV0X21vZGVsfSApOyAvLyBUID0gc29tZV90eXBlJiYKCWVsc2UKCQlkb1NvbWV0aGluZyggaW5wdXRfbW9kZWwgKTsgLy8gVCA9IHNvbWVfdHlwZSYKfQoKaW50IG1haW4oKQp7Cgl0ZXN0KHt9LCB0cnVlKTsKCXRlc3Qoe30sIGZhbHNlKTsKCXJldHVybiAwOwp9