aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for14.C
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
committerBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
commit1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch)
treec607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for14.C
parent283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff)
downloadtoolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for14.C')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for14.C94
1 files changed, 94 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for14.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for14.C
new file mode 100644
index 000000000..f43e1abcd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/range-for14.C
@@ -0,0 +1,94 @@
+// 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;
+}
+template<typename T> int *end(T &t)
+{
+ T::fail;
+}
+
+//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());
+}