#include <iostream>
#include <iomanip>
class A {
public:
A() { std::cout << "A()\n"; }
A(const A&) { std::cout << "A(const A&)\n"; }
A(A&&) { std::cout << "A(A&&)\n"; }
};
class B {
public:
B(A a): a_(std::move(a)) { std::cout << "B(A a)\n"; }
// B(const A& a): a_(a) { std::cout << "B(const A& a)\n"; }
// B(A&& a): a_(std::move(a)) { std::cout << "B(A&& a)\n"; }
// B(A&& a): a_(std::forward<A>(a)) { std::cout << "B(A&& a)\n"; }
private:
A a_;
};
int main() {
A a;
B b(a);
// B b(A());
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCmNsYXNzIEEgewpwdWJsaWM6CglBKCkgeyBzdGQ6OmNvdXQgPDwgIkEoKVxuIjsgfQoJQShjb25zdCBBJikgeyBzdGQ6OmNvdXQgPDwgIkEoY29uc3QgQSYpXG4iOyB9CglBKEEmJikgeyBzdGQ6OmNvdXQgPDwgIkEoQSYmKVxuIjsgfQp9OwoKY2xhc3MgQiB7CnB1YmxpYzoKCUIoQSBhKTogYV8oc3RkOjptb3ZlKGEpKSB7IHN0ZDo6Y291dCA8PCAiQihBIGEpXG4iOyB9CgkKCS8vIEIoY29uc3QgQSYgYSk6IGFfKGEpIHsgc3RkOjpjb3V0IDw8ICJCKGNvbnN0IEEmIGEpXG4iOyB9CgkvLyBCKEEmJiBhKTogYV8oc3RkOjptb3ZlKGEpKSB7IHN0ZDo6Y291dCA8PCAiQihBJiYgYSlcbiI7IH0KCS8vIEIoQSYmIGEpOiBhXyhzdGQ6OmZvcndhcmQ8QT4oYSkpIHsgc3RkOjpjb3V0IDw8ICJCKEEmJiBhKVxuIjsgfQpwcml2YXRlOgoJQSBhXzsKfTsKCmludCBtYWluKCkgewoJQSBhOwoJQiBiKGEpOwoJLy8gQiBiKEEoKSk7CglyZXR1cm4gMDsKfQo=