1 // RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s 2 // expected-no-diagnostics 3 4 // Test default template arguments for function templates. 5 template<typename T = int> 6 void f0(); 7 8 template<typename T> 9 void f0(); 10 g0()11void g0() { 12 f0(); // okay! 13 } 14 15 template<typename T, int N = T::value> 16 int &f1(T); 17 18 float &f1(...); 19 20 struct HasValue { 21 static const int value = 17; 22 }; 23 g1()24void g1() { 25 float &fr = f1(15); 26 int &ir = f1(HasValue()); 27 } 28 29 namespace PR16689 { 30 template <typename T1, typename T2> class tuple { 31 public: 32 template <typename = T2> tuple()33 constexpr tuple() {} 34 }; 35 template <class X, class... Y> struct a : public X { 36 using X::X; 37 }; 38 auto x = a<tuple<int, int> >(); 39 } 40 41 namespace PR16975 { 42 template <typename...> struct is { operator boolPR16975::is43 constexpr operator bool() const { return false; } 44 }; 45 46 template <typename... Types> 47 struct bar { 48 template <typename T, 49 bool = is<Types...>()> 50 bar(T); 51 }; 52 53 struct baz : public bar<> { 54 using bar::bar; 55 }; 56 57 baz data{0}; 58 } 59