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