#include <iostream>
struct foobar {
template<typename...Args>
foobar(Args&&...){ std::cout << "variadic" << std::endl;}
foobar() {std::cout << "ctor" << std::endl;}
foobar(foobar& f) : foobar(static_cast<const foobar&>(f)) {}
foobar(const foobar&) {std::cout << "copy" << std::endl;}
foobar(foobar&&) {std::cout << "move" << std::endl;}
};
template <>
foobar::foobar<foobar&>(foobar&) = delete;
template <>
foobar::foobar<const foobar&>(const foobar&) = delete;
template <>
foobar::foobar<foobar&&>(foobar&&) = delete;
int main()
{
foobar f;
foobar f1(1,2,3,4,5);
foobar f2= f;
foobar f5(f2);
foobar f3(std::move(f1));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IGZvb2JhciB7CiAgCiAgdGVtcGxhdGU8dHlwZW5hbWUuLi5BcmdzPgogIGZvb2JhcihBcmdzJiYuLi4peyBzdGQ6OmNvdXQgPDwgInZhcmlhZGljIiA8PCBzdGQ6OmVuZGw7fQogIAogICAKICBmb29iYXIoKSB7c3RkOjpjb3V0IDw8ICJjdG9yIiA8PCBzdGQ6OmVuZGw7fQogIGZvb2Jhcihmb29iYXImIGYpIDogZm9vYmFyKHN0YXRpY19jYXN0PGNvbnN0IGZvb2JhciY+KGYpKSB7fQogIGZvb2Jhcihjb25zdCBmb29iYXImKSB7c3RkOjpjb3V0IDw8ICJjb3B5IiA8PCBzdGQ6OmVuZGw7fQogIGZvb2Jhcihmb29iYXImJikge3N0ZDo6Y291dCA8PCAibW92ZSIgPDwgc3RkOjplbmRsO30KICAKfTsKCnRlbXBsYXRlIDw+CmZvb2Jhcjo6Zm9vYmFyPGZvb2JhciY+KGZvb2JhciYpID0gZGVsZXRlOwoKdGVtcGxhdGUgPD4KZm9vYmFyOjpmb29iYXI8Y29uc3QgZm9vYmFyJj4oY29uc3QgZm9vYmFyJikgPSBkZWxldGU7Cgp0ZW1wbGF0ZSA8Pgpmb29iYXI6OmZvb2Jhcjxmb29iYXImJj4oZm9vYmFyJiYpID0gZGVsZXRlOwoKCmludCBtYWluKCkKewoJZm9vYmFyIGY7Cglmb29iYXIgZjEoMSwyLDMsNCw1KTsKCWZvb2JhciBmMj0gZjsKICAgIGZvb2JhciBmNShmMik7Cglmb29iYXIgZjMoc3RkOjptb3ZlKGYxKSk7CgkKICByZXR1cm4gMDsKfQ==