#include <iostream>
#include <string>
#include <type_traits>
struct B { B() {} B(int) {} };
struct C {};
struct A : B, C
{
public:
template <
class T,
class =
typename std::enable_if<
std::is_convertible<T, B>::value, T>::type>
A(T&& t)
{
std::cout << "A(T&&)\n";
}
template <class... TArgs>
A(TArgs&&... targs)
{
std::cout << "A(TArgs&&)\n";
}
};
int main()
{
B b;
A a1(b);
A a2(4);
A a3("hello");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKI2luY2x1ZGUgPHN0cmluZz4KCiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KCgoKc3RydWN0IEIgeyBCKCkge30gQihpbnQpIHt9IH07CgpzdHJ1Y3QgQyB7fTsKCgoKc3RydWN0IEEgOiBCLCBDCgp7CgpwdWJsaWM6CgogICAgdGVtcGxhdGUgPAoKICAgICAgICBjbGFzcyBULAoKICAgICAgICBjbGFzcyA9CgogICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKCiAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvbnZlcnRpYmxlPFQsIEI+Ojp2YWx1ZSwgVD46OnR5cGU+IAoKICAgIEEoVCYmIHQpCgogICAgewoKICAgICAgICBzdGQ6OmNvdXQgPDwgIkEoVCYmKVxuIjsKCiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVEFyZ3M+CgogICAgQShUQXJncyYmLi4uIHRhcmdzKQoKICAgIHsKCiAgICAgICAgc3RkOjpjb3V0IDw8ICJBKFRBcmdzJiYpXG4iOwoKICAgIH0KCn07CgoKCmludCBtYWluKCkKCnsKCiAgICBCIGI7CgoKCiAgICBBIGExKGIpOwoKICAgIEEgYTIoNCk7CgogICAgQSBhMygiaGVsbG8iKTsKCgoKICAgIHJldHVybiAwOwoKfQoKCgo=