1*67e74705SXin Li // RUN: not %clang_cc1 -fsyntax-only %s -std=c++11 2>&1| FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li // Note that the error count below doesn't matter. We just want to 4*67e74705SXin Li // make sure that the parser doesn't crash. 5*67e74705SXin Li // CHECK: 16 errors 6*67e74705SXin Li 7*67e74705SXin Li // PR7511 8*67e74705SXin Li template<a> 9*67e74705SXin Li struct int_; 10*67e74705SXin Li 11*67e74705SXin Li template<a> 12*67e74705SXin Li template<int,typename T1,typename> 13*67e74705SXin Li struct ac 14*67e74705SXin Li { 15*67e74705SXin Li typedef T1 ae 16*67e74705SXin Li }; 17*67e74705SXin Li 18*67e74705SXin Li template<class>struct aaa 19*67e74705SXin Li { 20*67e74705SXin Li typedef ac<1,int,int>::ae ae 21*67e74705SXin Li }; 22*67e74705SXin Li 23*67e74705SXin Li template<class> 24*67e74705SXin Li struct state_machine 25*67e74705SXin Li { 26*67e74705SXin Li typedef aaa<int>::ae aaa; startac::aaa::state_machine27*67e74705SXin Li int start() 28*67e74705SXin Li { 29*67e74705SXin Li ant(0); 30*67e74705SXin Li } 31*67e74705SXin Li 32*67e74705SXin Li template<class> 33*67e74705SXin Li struct region_processing_helper 34*67e74705SXin Li { 35*67e74705SXin Li template<class,int=0> 36*67e74705SXin Li struct In; 37*67e74705SXin Li 38*67e74705SXin Li template<int my> 39*67e74705SXin Li struct In<a::int_<aaa::a>,my>; 40*67e74705SXin Li 41*67e74705SXin Li template<class Event> processac::aaa::state_machine::region_processing_helper42*67e74705SXin Li int process(Event) 43*67e74705SXin Li { 44*67e74705SXin Li In<a::int_<0> > a; 45*67e74705SXin Li } 46*67e74705SXin Li } 47*67e74705SXin Li template<class Event> 48*67e74705SXin Li int ant(Event) 49*67e74705SXin Li { 50*67e74705SXin Li region_processing_helper<int>* helper; 51*67e74705SXin Li helper->process(0) 52*67e74705SXin Li } 53*67e74705SXin Li }; 54*67e74705SXin Li 55*67e74705SXin Li int a() 56*67e74705SXin Li { 57*67e74705SXin Li state_machine<int> p; 58*67e74705SXin Li p.ant(0); 59*67e74705SXin Li } 60*67e74705SXin Li 61*67e74705SXin Li // PR9974 62*67e74705SXin Li template <int> struct enable_if; 63*67e74705SXin Li template <class > struct remove_reference ; 64*67e74705SXin Li template <class _Tp> struct remove_reference<_Tp&> ; 65*67e74705SXin Li 66*67e74705SXin Li template <class > struct __tuple_like; 67*67e74705SXin Li 68*67e74705SXin Li template <class _Tp, class _Up, int = __tuple_like<typename remove_reference<_Tp>::type>::value> 69*67e74705SXin Li struct __tuple_convertible; 70*67e74705SXin Li 71*67e74705SXin Li struct pair 72*67e74705SXin Li { 73*67e74705SXin Li template<class _Tuple, int = enable_if<__tuple_convertible<_Tuple, pair>::value>::type> 74*67e74705SXin Li pair(_Tuple&& ); 75*67e74705SXin Li }; 76*67e74705SXin Li 77*67e74705SXin Li template <class> struct basic_ostream; 78*67e74705SXin Li 79*67e74705SXin Li template <int> 80*67e74705SXin Li void endl( ) ; 81*67e74705SXin Li 82*67e74705SXin Li extern basic_ostream<char> cout; 83*67e74705SXin Li 84*67e74705SXin Li int operator<<( basic_ostream<char> , pair ) ; 85*67e74705SXin Li 86*67e74705SXin Li void register_object_imp ( ) 87*67e74705SXin Li { 88*67e74705SXin Li cout << endl<1>; 89*67e74705SXin Li } 90*67e74705SXin Li 91*67e74705SXin Li // PR12933 92*67e74705SXin Li namespacae PR12933 { 93*67e74705SXin Li template<typename S> 94*67e74705SXin Li template<typename T> 95*67e74705SXin Li void function(S a, T b) {} 96*67e74705SXin Li 97*67e74705SXin Li int main() { 98*67e74705SXin Li function(0, 1); 99*67e74705SXin Li return 0; 100*67e74705SXin Li } 101*67e74705SXin Li } 102*67e74705SXin Li 103*67e74705SXin Li // A buildbot failure from libcxx 104*67e74705SXin Li namespace libcxx_test { 105*67e74705SXin Li template <class _Ptr, bool> struct __pointer_traits_element_type; 106*67e74705SXin Li template <class _Ptr> struct __pointer_traits_element_type<_Ptr, true>; 107*67e74705SXin Li template <template <class, class...> class _Sp, class _Tp, class ..._Args> struct __pointer_traits_element_type<_Sp<_Tp, _Args...>, true> { 108*67e74705SXin Li typedef char type; 109*67e74705SXin Li }; 110*67e74705SXin Li template <class T> struct B {}; 111*67e74705SXin Li __pointer_traits_element_type<B<int>, true>::type x; 112*67e74705SXin Li } 113*67e74705SXin Li 114*67e74705SXin Li namespace PR14281_part1 { 115*67e74705SXin Li template <class P, int> struct A; 116*67e74705SXin Li template <class P> struct A<P, 1>; 117*67e74705SXin Li template <template <class, int> class S, class T> struct A<S<T, 1>, 1> { 118*67e74705SXin Li typedef char type; 119*67e74705SXin Li }; 120*67e74705SXin Li template <class T, int i> struct B {}; 121*67e74705SXin Li A<B<int, 1>, 1>::type x; 122*67e74705SXin Li } 123*67e74705SXin Li 124*67e74705SXin Li namespace PR14281_part2 { 125*67e74705SXin Li typedef decltype(nullptr) nullptr_t; 126*67e74705SXin Li template <class P, nullptr_t> struct A; 127*67e74705SXin Li template <class P> struct A<P, nullptr>; 128*67e74705SXin Li template <template <class, nullptr_t> class S, class T> struct A<S<T, nullptr>, nullptr> { 129*67e74705SXin Li typedef char type; 130*67e74705SXin Li }; 131*67e74705SXin Li template <class T, nullptr_t i> struct B {}; 132*67e74705SXin Li A<B<int, nullptr>, nullptr>::type x; 133*67e74705SXin Li } 134*67e74705SXin Li 135*67e74705SXin Li namespace PR14281_part3 { 136*67e74705SXin Li extern int some_decl; 137*67e74705SXin Li template <class P, int*> struct A; 138*67e74705SXin Li template <class P> struct A<P, &some_decl>; 139*67e74705SXin Li template <template <class, int*> class S, class T> struct A<S<T, &some_decl>, &some_decl> { 140*67e74705SXin Li typedef char type; 141*67e74705SXin Li }; 142*67e74705SXin Li template <class T, int* i> struct B {}; 143*67e74705SXin Li A<B<int, &some_decl>, &some_decl>::type x; 144*67e74705SXin Li } 145