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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #include <iostream> #define LAMBDA(x) [&] { return x; } class A { public: A() {}; A(const A&) { std::cout << "Copy "; } A(A&&) { std::cout << "Move "; } }; class B1 { public: B1(const A& a_) : a(a_) {} B1(A&& a_) : a(std::move(a_)) {} A a; }; class B2 { public: B2(const A& a_) : a(a_) {} B2(A&& a_) : a(std::move(a_)) {} template <class LAMBDA_T> B2(LAMBDA_T&& f, decltype(f())* dummy = 0) : a(f()) {} A a; }; int main() { A a; std::cout << "B1 b11( a ): "; B1 b11(a); std::cout << std::endl; std::cout << "B2 b12(LAMBDA(a)): "; B2 b12(LAMBDA(a)); std::cout << std::endl; std::cout << std::endl; std::cout << "B1 b21( std::move(a) ): "; B1 b21(std::move(a)); std::cout << std::endl; std::cout << "B2 b22(LAMBDA(std::move(a))): "; B2 b22(LAMBDA(std::move(a))); std::cout << std::endl; std::cout << std::endl; std::cout << "B1 b31(( A() )): "; B1 b31((A())); std::cout << std::endl; std::cout << "B2 b32((LAMBDA(A()))): "; B2 b32((LAMBDA(A()))); std::cout << std::endl; std::cout << std::endl; } |
I2luY2x1ZGUgPGlvc3RyZWFtPgoKI2RlZmluZSBMQU1CREEoeCkgWyZdIHsgcmV0dXJuIHg7IH0KCmNsYXNzIEEKewpwdWJsaWM6CiAgQSgpIHt9OwogIEEoY29uc3QgQSYpIHsgc3RkOjpjb3V0IDw8ICJDb3B5ICI7IH0KICBBKEEmJikgeyBzdGQ6OmNvdXQgPDwgIk1vdmUgIjsgfQp9OwoKY2xhc3MgQjEKewpwdWJsaWM6CiAgQjEoY29uc3QgQSYgYV8pIDogYShhXykge30KICBCMShBJiYgYV8pIDogYShzdGQ6Om1vdmUoYV8pKSB7fQogIEEgYTsKfTsKCmNsYXNzIEIyCnsKcHVibGljOgogIEIyKGNvbnN0IEEmIGFfKSA6IGEoYV8pIHt9CiAgQjIoQSYmIGFfKSA6IGEoc3RkOjptb3ZlKGFfKSkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgTEFNQkRBX1Q+CiAgQjIoTEFNQkRBX1QmJiBmLCBkZWNsdHlwZShmKCkpKiBkdW1teSA9IDApIDogYShmKCkpIHt9CiAgQSBhOwp9OwoKaW50IG1haW4oKQp7CiAgQSBhOwogIHN0ZDo6Y291dCA8PCAiQjEgYjExKCAgICAgICBhICk6ICI7CiAgQjEgYjExKGEpOwogIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpjb3V0IDw8ICJCMiBiMTIoTEFNQkRBKGEpKTogIjsKICBCMiBiMTIoTEFNQkRBKGEpKTsKICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CgogIHN0ZDo6Y291dCA8PCAiQjEgYjIxKCAgICAgICBzdGQ6Om1vdmUoYSkgKTogIjsKICBCMSBiMjEoc3RkOjptb3ZlKGEpKTsKICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogIHN0ZDo6Y291dCA8PCAiQjIgYjIyKExBTUJEQShzdGQ6Om1vdmUoYSkpKTogIjsKICBCMiBiMjIoTEFNQkRBKHN0ZDo6bW92ZShhKSkpOwogIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCiAgc3RkOjpjb3V0IDw8ICJCMSBiMzEoKCAgICAgICBBKCkgKSk6ICI7IAogIEIxIGIzMSgoQSgpKSk7IAogIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpjb3V0IDw8ICJCMiBiMzIoKExBTUJEQShBKCkpKSk6ICI7CiAgQjIgYjMyKChMQU1CREEoQSgpKSkpOyAKICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7Cn0=
-
upload with new input
-
result: Success time: 0s memory: 2828 kB returned value: 0
B1 b11( a ): Copy B2 b12(LAMBDA(a)): Copy B1 b21( std::move(a) ): Move B2 b22(LAMBDA(std::move(a))): Move B1 b31(( A() )): Move B2 b32((LAMBDA(A()))):


