default-arguments-cxx0x.cpp 1009 B

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