Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/cpp0x/range-for14.C @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line source
// 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()); }