annotate gcc/testsuite/g++.dg/cpp0x/variadic-crash1.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // { dg-do compile { target c++11 } }
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 #define ONE
kono
parents:
diff changeset
4 #define TWO
kono
parents:
diff changeset
5 #define THREE
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 struct Something {};
kono
parents:
diff changeset
8 Something ___;
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 template <class F>
kono
parents:
diff changeset
11 struct Trial
kono
parents:
diff changeset
12 {
kono
parents:
diff changeset
13 F f;
kono
parents:
diff changeset
14 public:
kono
parents:
diff changeset
15 Trial() : f() {}
kono
parents:
diff changeset
16 Trial( const F& ff ) : f(ff) { }
kono
parents:
diff changeset
17 template <typename... Args>
kono
parents:
diff changeset
18 struct Sig { typedef int ResultType; };
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 template <typename... Args>
kono
parents:
diff changeset
21 struct Sig<Something,Args...> { typedef int ResultType; };
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 #ifdef ONE
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 template <typename... Args>
kono
parents:
diff changeset
26 typename Sig<Something,Args...>::ResultType operator()(const Something& s, const Args&... args) const
kono
parents:
diff changeset
27 {
kono
parents:
diff changeset
28 return f(args...);
kono
parents:
diff changeset
29 }
kono
parents:
diff changeset
30 #endif
kono
parents:
diff changeset
31 #ifdef TWO
kono
parents:
diff changeset
32 template <typename... Args>
kono
parents:
diff changeset
33 typename Sig<Args...>::ResultType operator()(const Args&... args) const
kono
parents:
diff changeset
34 {
kono
parents:
diff changeset
35 return f(args...);
kono
parents:
diff changeset
36 }
kono
parents:
diff changeset
37 #endif
kono
parents:
diff changeset
38 };
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 struct Internal
kono
parents:
diff changeset
41 {
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 template <typename... Args>
kono
parents:
diff changeset
44 struct Sig { typedef int ResultType; };
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 template <typename... Args>
kono
parents:
diff changeset
47 struct Sig<Something,Args...> { typedef int ResultType; };
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49 template <typename... Args>
kono
parents:
diff changeset
50 int operator()(const Args&... args) const
kono
parents:
diff changeset
51 {
kono
parents:
diff changeset
52 int n = sizeof...(Args);
kono
parents:
diff changeset
53 return n;
kono
parents:
diff changeset
54 }
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 static Trial<Internal>& full() { static Trial<Internal> f; return f; }
kono
parents:
diff changeset
57 };
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 static Trial<Internal>& internal = Internal::full();
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 int main()
kono
parents:
diff changeset
62 {
kono
parents:
diff changeset
63 int n = 0;
kono
parents:
diff changeset
64 #ifdef ONE
kono
parents:
diff changeset
65 n = internal(___,1,2);
kono
parents:
diff changeset
66 #endif
kono
parents:
diff changeset
67 #ifdef THREE
kono
parents:
diff changeset
68 n = internal(___,1,2,3);
kono
parents:
diff changeset
69 n = internal(___,1,2,3,4);
kono
parents:
diff changeset
70 #endif
kono
parents:
diff changeset
71 return 0;
kono
parents:
diff changeset
72 }