1 // Test for other range-based for loops with
2 // begin/end member functions
4 // { dg-do compile { target c++11 } }
6 //These should not be used
7 template<typename T> int *begin(T &t)
12 template<typename T> int *end(T &t)
22 int *begin(int x); // { dg-message "note" }
34 template <typename T> T *begin(); // { dg-message "note" }
40 template <typename T=int> T *begin();
46 template <typename T=int> T *begin(int x=0);
52 for (int x : default1()); // { dg-error "no matching function|note" }
53 for (int x : default2());
54 for (int x : default3()); // { dg-error "no matching function|note" }
55 for (int x : default4());
56 for (int x : default5());
63 int *begin(); // { dg-message "" }
71 struct derived1 : base_begin, base_end
75 struct base_begin2 : base_begin
79 struct derived2 : base_begin, base_end, base_begin2 // { dg-warning "" }
83 struct base_begin3 : virtual base_begin
87 struct derived3 : virtual base_begin, base_end, base_begin3
93 for (int x : derived1());
94 for (int x : derived2()); // { dg-error "is ambiguous" }
95 for (int x : derived3());