brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 29a7549 Raw
62 lines · cpp
1// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s2 3// A default template-argument may be specified for any kind of4// template-parameter that is not a template parameter pack.5template<typename ...Types = int> // expected-error{{template parameter pack cannot have a default argument}}6struct X0;7 8template<int ...Values = 0> // expected-error{{template parameter pack cannot have a default argument}}9struct X1;10 11template<typename T> struct vector;12 13template<template<class> class ...Templates = vector> // expected-error{{template parameter pack cannot have a default argument}}14struct X2; 15 16struct X3 {17  template<typename T = int> // expected-error{{default template argument not permitted on a friend template}}18  friend void f0(X3);19 20  template<typename T = int>21  friend void f1(X3) {22  }23};24 25namespace PR8748 {26  // Testcase 127  struct A0 { template<typename U> struct B; }; 28  template<typename U = int> struct A0::B { };29  30  // Testcase 231  template<typename T> struct A1 { template<typename U> struct B; }; 32  template<typename T> template<typename U = int> struct A1<T>::B { }; // expected-error{{cannot add a default template argument to the definition of a member of a class template}}33 34  // Testcase 335  template<typename T>36  struct X2 {37    void f0();38    template<typename U> void f1();39  };40  41  template<typename T = int> void X2<T>::f0() { } // expected-error{{cannot add a default template argument to the definition of a member of a class template}} 42  template<typename T> template<typename U = int> void X2<T>::f1() { } // expected-error{{cannot add a default template argument to the definition of a member of a class template}}43 44  namespace Inner {45    template<typename T> struct X3;46    template<typename T> void f2();47  }48 49  // Okay; not class members.50  template<typename T = int> struct Inner::X3 { };51  template<typename T = int> void Inner::f2() {}52}53 54namespace PR10069 {55  template<typename T, T a, T b=0, T c=1>56  T f(T x);57 58  void g() {59    f<unsigned int, 0>(0);60  }61}62