10672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify %s 20672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor 30672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregortemplate<int i> class A { }; 4e5ae4387a39699967565520bc4169dec43d7f147Douglas Gregortemplate<short s> void f(A<s>); // expected-note{{candidate template ignored: substitution failure}} 50672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor 60672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregorvoid k1() { 70672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor A<1> a; 80672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor f(a); // expected-error{{no matching function for call}} 90672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor f<1>(a); 100672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor} 110672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregortemplate<const short cs> class B { }; 120672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregortemplate<short s> void g(B<s>); 130672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregorvoid k2() { 140672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor B<1> b; 150672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor g(b); // OK: cv-qualifiers are ignored on template parameter types 160672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor} 170672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor 18ca8d79a0dc1b31a73626e366e17f0ddb95250b19Douglas Gregortemplate<short s> void h(int (&)[s]); // expected-note{{candidate function template not viable: requires 1 argument, but 2 were provided}} 190672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregorvoid k3() { 200672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor int array[5]; 210672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor h(array); 220672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor h<5>(array); 230672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor} 240672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor 25e5ae4387a39699967565520bc4169dec43d7f147Douglas Gregortemplate<short s> void h(int (&)[s], A<s>); // expected-note{{candidate template ignored: substitution failure}} 260672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregorvoid k4() { 270672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor A<5> a; 280672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor int array[5]; 290672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor h(array, a); // expected-error{{no matching function for call}} 300672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor h<5>(array, a); 310672dde9c095c3e894519ed66aed2bfff9fbf250Douglas Gregor} 32