brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · c09c0b2 Raw
77 lines · cpp
1// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s2// expected-no-diagnostics3 4// Check for declaration matching with out-of-line declarations and5// variadic templates, which involves proper computation of the6// injected-class-name.7template<typename T, typename ...Types>8struct X0 {9  typedef T type;10 11  void f0(T);12  type f1(T);13};14 15template<typename T, typename ...Types>16void X0<T, Types...>::f0(T) { }17 18template<typename T, typename ...Types>19typename X0<T, Types...>::type X0<T, Types...>::f1(T) { }20 21template<typename T, typename ...Types>22struct X0<T, T, Types...> {23  typedef T* result;24  result f3();25 26  template<typename... InnerTypes>27  struct Inner;28};29 30template<typename T, typename ...Types>31typename X0<T, T, Types...>::result X0<T, T, Types...>::f3() { return 0; }32 33template<typename T, typename ...Types>34template<typename ...InnerTypes>35struct X0<T, T, Types...>::Inner {36  template<typename ...ReallyInner> void f4();37};38 39template<typename T, typename ...Types>40template<typename ...InnerTypes>41template<typename ...ReallyInner>42void X0<T, T, Types...>::Inner<InnerTypes...>::f4() { }43 44namespace rdar8848837 {45  // Out-of-line definitions that cause rebuilding in the current46  // instantiation.47  template<typename F> struct X;48 49  template<typename R, typename ...ArgTypes>50  struct X<R(ArgTypes...)> {51    X<R(ArgTypes...)> f();52  };53 54  template<typename R, typename ...ArgTypes>55  X<R(ArgTypes...)> X<R(ArgTypes...)>::f() { return *this; }56 57 58  X<int(float, double)> xif;59 60  template<unsigned> struct unsigned_c { };61  template<typename ...ArgTypes> int g(ArgTypes...);62 63  template<typename F> struct X1;64 65  template<typename R, typename ...ArgTypes>66  struct X1<R(ArgTypes...)> {67    unsigned_c<sizeof(1 + g(ArgTypes()...))> f();68  };69 70  template<typename R, typename ...ArgTypes>71  unsigned_c<sizeof(1 + g(ArgTypes()...))> X1<R(ArgTypes...)>::f() { 72    return unsigned_c<sizeof(int)>();73  }74 75  X1<int(float, double)> xif2;76}77