#include <iostream>
class Foo {
public:
Foo(){};
template<typename T>
Foo (T&) {
std::cout << "template" << std::endl;
}
//Foo(Foo&) {
// std::cout << "copy" << std::endl;
//}
Foo(const Foo&) {
std::cout << "copy2" << std::endl;
}
};
int main(){
const Foo f;
Foo f2 (f);
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KCgljbGFzcyBGb28gewoJICAgIHB1YmxpYzoKCSAgICBGb28oKXt9OwoJCgkgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KCSAgICBGb28gKFQmKSB7CgkgICAgICAgIHN0ZDo6Y291dCA8PCAidGVtcGxhdGUiIDw8IHN0ZDo6ZW5kbDsKCSAgICB9CgkKCSAgICAvL0ZvbyhGb28mKSB7CgkgICAgLy8gICAgc3RkOjpjb3V0IDw8ICJjb3B5IiA8PCBzdGQ6OmVuZGw7CgkgICAgLy99CgkKCSAgICBGb28oY29uc3QgRm9vJikgewoJICAgICAgICBzdGQ6OmNvdXQgPDwgImNvcHkyIiA8PCBzdGQ6OmVuZGw7CgkgICAgfQoJfTsKCQoJCglpbnQgbWFpbigpewoJICAgIGNvbnN0IEZvbyBmOwoJCgkgICAgRm9vIGYyIChmKTsKCQoJfQ==