annotate gcc/testsuite/g++.dg/cpp0x/range-for14.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 // Test for other range-based for loops with
kono
parents:
diff changeset
2 // begin/end member functions
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 // { dg-do compile { target c++11 } }
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 //These should not be used
kono
parents:
diff changeset
7 template<typename T> int *begin(T &t)
kono
parents:
diff changeset
8 {
kono
parents:
diff changeset
9 T::fail;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
10 return 0;
111
kono
parents:
diff changeset
11 }
kono
parents:
diff changeset
12 template<typename T> int *end(T &t)
kono
parents:
diff changeset
13 {
kono
parents:
diff changeset
14 T::fail;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
15 return 0;
111
kono
parents:
diff changeset
16 }
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 //Test for defaults
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 struct default1
kono
parents:
diff changeset
21 {
kono
parents:
diff changeset
22 int *begin(int x); // { dg-message "note" }
kono
parents:
diff changeset
23 int *end();
kono
parents:
diff changeset
24 };
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 struct default2
kono
parents:
diff changeset
27 {
kono
parents:
diff changeset
28 int *begin(int x=0);
kono
parents:
diff changeset
29 int *end();
kono
parents:
diff changeset
30 };
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 struct default3
kono
parents:
diff changeset
33 {
kono
parents:
diff changeset
34 template <typename T> T *begin(); // { dg-message "note" }
kono
parents:
diff changeset
35 int *end();
kono
parents:
diff changeset
36 };
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 struct default4
kono
parents:
diff changeset
39 {
kono
parents:
diff changeset
40 template <typename T=int> T *begin();
kono
parents:
diff changeset
41 int *end();
kono
parents:
diff changeset
42 };
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 struct default5
kono
parents:
diff changeset
45 {
kono
parents:
diff changeset
46 template <typename T=int> T *begin(int x=0);
kono
parents:
diff changeset
47 int *end();
kono
parents:
diff changeset
48 };
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 void test1()
kono
parents:
diff changeset
51 {
kono
parents:
diff changeset
52 for (int x : default1()); // { dg-error "no matching function|note" }
kono
parents:
diff changeset
53 for (int x : default2());
kono
parents:
diff changeset
54 for (int x : default3()); // { dg-error "no matching function|note" }
kono
parents:
diff changeset
55 for (int x : default4());
kono
parents:
diff changeset
56 for (int x : default5());
kono
parents:
diff changeset
57 }
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 //Inheritance tests
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 struct base_begin
kono
parents:
diff changeset
62 {
kono
parents:
diff changeset
63 int *begin(); // { dg-message "" }
kono
parents:
diff changeset
64 };
kono
parents:
diff changeset
65
kono
parents:
diff changeset
66 struct base_end
kono
parents:
diff changeset
67 {
kono
parents:
diff changeset
68 int *end();
kono
parents:
diff changeset
69 };
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 struct derived1 : base_begin, base_end
kono
parents:
diff changeset
72 {
kono
parents:
diff changeset
73 };
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 struct base_begin2 : base_begin
kono
parents:
diff changeset
76 {
kono
parents:
diff changeset
77 };
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 struct derived2 : base_begin, base_end, base_begin2 // { dg-warning "" }
kono
parents:
diff changeset
80 {
kono
parents:
diff changeset
81 };
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 struct base_begin3 : virtual base_begin
kono
parents:
diff changeset
84 {
kono
parents:
diff changeset
85 };
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 struct derived3 : virtual base_begin, base_end, base_begin3
kono
parents:
diff changeset
88 {
kono
parents:
diff changeset
89 };
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 void test2()
kono
parents:
diff changeset
92 {
kono
parents:
diff changeset
93 for (int x : derived1());
kono
parents:
diff changeset
94 for (int x : derived2()); // { dg-error "is ambiguous" }
kono
parents:
diff changeset
95 for (int x : derived3());
kono
parents:
diff changeset
96 }