We correctly diagnose the invalid access since r11-1350.

gcc/testsuite/ChangeLog:

        PR c++/16617
        * g++.dg/template/access36.C: New test.
---
 gcc/testsuite/g++.dg/template/access36.C | 25 ++++++++++++++++++++++++
 1 file changed, 25 insertions(+)
 create mode 100644 gcc/testsuite/g++.dg/template/access36.C

diff --git a/gcc/testsuite/g++.dg/template/access36.C 
b/gcc/testsuite/g++.dg/template/access36.C
new file mode 100644
index 00000000000..72ca23c7017
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/access36.C
@@ -0,0 +1,25 @@
+// PR c++/16617
+
+class B
+{
+  protected:
+  int i;
+};
+
+template <class T> void fr ();
+
+class D2 : public B
+{
+  friend void fr<int> ();
+};
+
+template<int B::*> struct X
+{};
+
+template <class T> void fr ()
+{
+  X<&B::i> x1;  // { dg-error "protected" }
+  X<&D2::i> x2; // { dg-error "protected" }
+}
+
+template void fr<char>();
-- 
2.31.1.362.g311531c9de

Reply via email to