1// PR c++/41703 2// The second GetAllSize template is more specialized because even though 3// deduction on each parameter type succeeds, we never get a template 4// argument for its X to make it match the first template. 5 6template <typename T, int (T::*)() const> 7struct TSizeEnabler 8{ 9 typedef T TClass; 10}; 11 12template <typename X> 13int 14GetAllSize(const X &Var) 15{ return sizeof(Var); } 16 17template <typename X> 18int 19GetAllSize(const typename TSizeEnabler<X, &X::func>::TClass &Var) 20{ return Var.func(); } 21 22struct H 23{ 24 int func() const; 25}; 26 27int main() 28{ 29 H b; 30 return GetAllSize< H >(b); 31} 32