1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s 28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics 351ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor 451ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor// Test default template arguments for function templates. 551ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregortemplate<typename T = int> 651ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregorvoid f0(); 751ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor 851ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregortemplate<typename T> 951ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregorvoid f0(); 1051ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor 1151ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregorvoid g0() { 1251ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor f0(); // okay! 1351ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor} 1451ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor 1551ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregortemplate<typename T, int N = T::value> 1651ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregorint &f1(T); 1751ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor 1851ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregorfloat &f1(...); 1951ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor 2051ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregorstruct HasValue { 2151ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor static const int value = 17; 2251ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor}; 2351ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor 2451ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregorvoid g1() { 2551ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor float &fr = f1(15); 2651ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor int &ir = f1(HasValue()); 2751ffb0c9d43b2d3fd210e51ecdd67ba5d1790d70Douglas Gregor} 289d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer 299d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemernamespace PR16689 { 309d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer template <typename T1, typename T2> class tuple { 319d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer public: 329d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer template <typename = T2> 339d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer constexpr tuple() {} 349d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer }; 359d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer template <class X, class... Y> struct a : public X { 369d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer using X::X; 379d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer }; 389d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer auto x = a<tuple<int, int> >(); 399d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer} 409d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer 419d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemernamespace PR16975 { 429d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer template <typename...> struct is { 439d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer constexpr operator bool() const { return false; } 449d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer }; 459d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer 469d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer template <typename... Types> 479d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer struct bar { 489d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer template <typename T, 499d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer bool = is<Types...>()> 509d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer bar(T); 519d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer }; 529d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer 539d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer struct baz : public bar<> { 549d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer using bar::bar; 559d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer }; 569d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer 579d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer baz data{0}; 589d57b8dea3b139dc2e2976ffccef50c74ac03873David Majnemer} 59