Viewing file: range-for14.C (1.46 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// Test for other range-based for loops with // begin/end member functions
// { dg-do compile { target c++11 } }
//These should not be used template<typename T> int *begin(T &t) { T::fail; return 0; } template<typename T> int *end(T &t) { T::fail; return 0; }
//Test for defaults
struct default1 { int *begin(int x); // { dg-message "note" } int *end(); };
struct default2 { int *begin(int x=0); int *end(); };
struct default3 { template <typename T> T *begin(); // { dg-message "note" } int *end(); };
struct default4 { template <typename T=int> T *begin(); int *end(); };
struct default5 { template <typename T=int> T *begin(int x=0); int *end(); };
void test1() { for (int x : default1()); // { dg-error "no matching function|note" } for (int x : default2()); for (int x : default3()); // { dg-error "no matching function|note" } for (int x : default4()); for (int x : default5()); }
//Inheritance tests
struct base_begin { int *begin(); // { dg-message "" } };
struct base_end { int *end(); };
struct derived1 : base_begin, base_end { };
struct base_begin2 : base_begin { };
struct derived2 : base_begin, base_end, base_begin2 // { dg-warning "" } { };
struct base_begin3 : virtual base_begin { };
struct derived3 : virtual base_begin, base_end, base_begin3 { };
void test2() { for (int x : derived1()); for (int x : derived2()); // { dg-error "is ambiguous" } for (int x : derived3()); }
|