1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s 28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics 377d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregor 477d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregor// If the original function parameter associated with A is a function 577d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregor// parameter pack and the function parameter associated with P is not 677d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregor// a function parameter pack, then template argument deduction fails. 777d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregortemplate<class ... Args> int& f(Args ... args); 877d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregortemplate<class T1, class ... Args> float& f(T1 a1, Args ... args); 977d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregortemplate<class T1, class T2> double& f(T1 a1, T2 a2); 1077d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregor 1177d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregorvoid test_f() { 1277d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregor int &ir1 = f(); 1377d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregor float &fr1 = f(1, 2, 3); 1477d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregor double &dr1 = f(1, 2); 1577d6bb9e223496aa5288294f34e7225d1f65dddcDouglas Gregor} 16