1151c4568SRichard Smith // No PCH: 2151c4568SRichard Smith // RUN: %clang_cc1 -pedantic -std=c++1z -include %s -verify %s 3151c4568SRichard Smith // 4151c4568SRichard Smith // With PCH: 5151c4568SRichard Smith // RUN: %clang_cc1 -pedantic -std=c++1z -emit-pch %s -o %t 6151c4568SRichard Smith // RUN: %clang_cc1 -pedantic -std=c++1z -include-pch %t -verify %s 7151c4568SRichard Smith 8*a45f713cSLuboš Luňák // RUN: %clang_cc1 -pedantic -std=c++1z -emit-pch -fpch-instantiate-templates %s -o %t 9*a45f713cSLuboš Luňák // RUN: %clang_cc1 -pedantic -std=c++1z -include-pch %t -verify %s 10*a45f713cSLuboš Luňák 11151c4568SRichard Smith #ifndef HEADER 12151c4568SRichard Smith #define HEADER 13151c4568SRichard Smith 14151c4568SRichard Smith template<typename ...T> struct A : T... { 15151c4568SRichard Smith using T::f ...; gA16151c4568SRichard Smith template<typename ...U> void g(U ...u) { f(u...); } 17151c4568SRichard Smith }; 18151c4568SRichard Smith 19151c4568SRichard Smith struct X { void f(); }; 20151c4568SRichard Smith struct Y { void f(int); }; 21151c4568SRichard Smith struct Z { void f(int, int); }; 22151c4568SRichard Smith 23151c4568SRichard Smith inline A<X, Y, Z> a; 24151c4568SRichard Smith 25151c4568SRichard Smith #else 26151c4568SRichard Smith test()27151c4568SRichard Smithvoid test() { 28151c4568SRichard Smith a.g(); 29151c4568SRichard Smith a.g(0); 30151c4568SRichard Smith a.g(0, 0); 31*a45f713cSLuboš Luňák // expected-error@16 {{no match}} 32*a45f713cSLuboš Luňák // expected-note@19 {{candidate}} 33*a45f713cSLuboš Luňák // expected-note@20 {{candidate}} 34*a45f713cSLuboš Luňák // expected-note@21 {{candidate}} 35151c4568SRichard Smith a.g(0, 0, 0); // expected-note {{instantiation of}} 36151c4568SRichard Smith } 37151c4568SRichard Smith 38151c4568SRichard Smith #endif 39