template<typename T1,
typename T2 = decltype(&T1::method)>
struct Foo {};
struct Bar
{
void method() { }
};
template<class T> Foo<T> foo(T&)
{
return Foo<T>();
}
int main()
{
Bar t;
foo(t);
}
dGVtcGxhdGU8dHlwZW5hbWUgVDEsCgkJIHR5cGVuYW1lIFQyID0gZGVjbHR5cGUoJlQxOjptZXRob2QpPgpzdHJ1Y3QgRm9vIHt9OwoKc3RydWN0IEJhcgp7Cgl2b2lkIG1ldGhvZCgpIHsgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4gRm9vPFQ+IGZvbyhUJikKewoJcmV0dXJuIEZvbzxUPigpOwp9CgppbnQgbWFpbigpCnsJCQkKCUJhciB0OwoJZm9vKHQpOwp9