blob: ef71e2a9acf457ea0c0d7b2afa061b56b30a3f15 [file] [log] [blame]
Eli Bendersky36a61932014-06-20 13:09:59 +00001// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s
2
Artem Belevich2eeb0482018-09-21 17:46:28 +00003template<typename T=int> struct S {};
Eli Bendersky36a61932014-06-20 13:09:59 +00004template<typename> void f();
5
Michael Liao0fb707b2019-05-08 00:52:33 +00006template<typename T, typename... V> struct S<T(V...)> {};
7
8template<typename ...T> struct V {};
9template<typename ...T> struct V<void(T)...> {};
Eli Bendersky36a61932014-06-20 13:09:59 +000010
11void foo(void) {
12 // In C++11 mode, all of these are expected to parse correctly, and the CUDA
13 // language should not interfere with that.
14
15 // expected-no-diagnostics
16
17 S<S<S<int>>> s3;
Artem Belevich2eeb0482018-09-21 17:46:28 +000018 S<S<S<>>> s30;
Eli Bendersky36a61932014-06-20 13:09:59 +000019
20 S<S<S<S<int>>>> s4;
Artem Belevich2eeb0482018-09-21 17:46:28 +000021 S<S<S<S<>>>> s40;
Eli Bendersky36a61932014-06-20 13:09:59 +000022
23 S<S<S<S<S<int>>>>> s5;
Artem Belevich2eeb0482018-09-21 17:46:28 +000024 S<S<S<S<S<>>>>> s50;
Eli Bendersky36a61932014-06-20 13:09:59 +000025
26 (void)(&f<S<S<int>>>==0);
Artem Belevich2eeb0482018-09-21 17:46:28 +000027 (void)(&f<S<S<>>>==0);
Michael Liao0fb707b2019-05-08 00:52:33 +000028
29 S<S<S<void()>>> s6;
30}
31
32template<typename ...T>
33void bar(T... args) {
34 S<S<V<void(T)...>>> s7;
Eli Bendersky36a61932014-06-20 13:09:59 +000035}