aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2015-03-28 10:28:14 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2015-03-28 10:28:14 +0000
commitf8f40e69b056bcd73c1e44e69dd1109f2ff1c1be (patch)
tree4a3205bf348625265a9acbbb332bf318a1a47c7a
parent2894311302edaf27ed41a0b517e1c808c286974c (diff)
downloadgcc-f8f40e69b056bcd73c1e44e69dd1109f2ff1c1be.zip
gcc-f8f40e69b056bcd73c1e44e69dd1109f2ff1c1be.tar.gz
gcc-f8f40e69b056bcd73c1e44e69dd1109f2ff1c1be.tar.bz2
re PR c++/42328 (rejects valid friend)
2015-03-28 Paolo Carlini <paolo.carlini@oracle.com> PR c++/42328 * g++.dg/template/friend58.C: New. * g++.dg/template/friend59.C: Likewise. From-SVN: r221751
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/template/friend58.C19
-rw-r--r--gcc/testsuite/g++.dg/template/friend59.C22
3 files changed, 47 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d94f5a1..0e4c56c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2015-03-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/42328
+ * g++.dg/template/friend58.C: New.
+ * g++.dg/template/friend59.C: Likewise.
+
2015-03-27 Tobias Burnus <burnus@net-b.de>
PR c/65586
diff --git a/gcc/testsuite/g++.dg/template/friend58.C b/gcc/testsuite/g++.dg/template/friend58.C
new file mode 100644
index 0000000..cadfb3e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/friend58.C
@@ -0,0 +1,19 @@
+// PR c++/42328
+
+template<typename T, typename U>
+class freeList
+{
+public:
+ void foo() {};
+};
+
+class bar {};
+
+class baz : protected freeList<bar, baz>
+{
+ template<typename T>
+ friend
+ void freeList<T, baz>::foo(); // { dg-error "friend" }
+};
+
+baz b;
diff --git a/gcc/testsuite/g++.dg/template/friend59.C b/gcc/testsuite/g++.dg/template/friend59.C
new file mode 100644
index 0000000..e7c6d58
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/friend59.C
@@ -0,0 +1,22 @@
+// PR c++/42328
+
+template<typename T, typename U>
+class freeList
+{
+public:
+ void foo() {};
+};
+
+class bar {};
+
+class baz;
+template<typename T> class freeList<T, baz> { void foo(); };
+
+class baz : protected freeList<bar, baz>
+{
+ template<typename T>
+ friend
+ void freeList<T, baz>::foo();
+};
+
+baz b;