diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2019-04-04 15:38:05 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2019-04-04 15:38:05 +0000 |
commit | a7f70a0925d510d2579f6c20bf056e30664ef0f6 (patch) | |
tree | 40ba52d4fecb00e411a28be52bc79ad2bbf02ebb /gcc | |
parent | 7b74bfb1062e523c50ccbea6dd966e3cb93d8d91 (diff) | |
download | gcc-a7f70a0925d510d2579f6c20bf056e30664ef0f6.zip gcc-a7f70a0925d510d2579f6c20bf056e30664ef0f6.tar.gz gcc-a7f70a0925d510d2579f6c20bf056e30664ef0f6.tar.bz2 |
re PR c++/61327 (Problem with friend template object)
2019-04-04 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/61327
* g++.dg/cpp0x/friend4.C: New.
* g++.dg/cpp0x/friend5.C: Likewise.
From-SVN: r270145
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/friend4.C | 30 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/friend5.C | 26 |
3 files changed, 62 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1195c43..0363d1f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,11 @@ 2019-04-04 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/61327 + * g++.dg/cpp0x/friend4.C: New. + * g++.dg/cpp0x/friend5.C: Likewise. + +2019-04-04 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/56643 * g++.dg/cpp0x/noexcept40.C: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/friend4.C b/gcc/testsuite/g++.dg/cpp0x/friend4.C new file mode 100644 index 0000000..6ff53de --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/friend4.C @@ -0,0 +1,30 @@ +// PR c++/61327 +// { dg-do compile { target c++11 } } + +template<typename... T> +struct A; + +template<typename T> +struct A<T> +{ + template<typename U> + void f(U* u) { + u->T::g(); + } +}; + +struct B { +protected: + void g() { } +}; + +struct C : B { + template<typename...> friend struct A; +}; + +int main() +{ + C c; + A<B> a; + a.f(&c); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/friend5.C b/gcc/testsuite/g++.dg/cpp0x/friend5.C new file mode 100644 index 0000000..39ea28b --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/friend5.C @@ -0,0 +1,26 @@ +// PR c++/61327 +// { dg-do compile { target c++11 } } + +class B { +protected: + void f() {} +}; + +template <typename...> +struct S; + +template <typename R> +struct S<R>{ + template <typename T> + static void caller(T *p) {p->B::f();} +}; + +class Q : B{ +template <typename...> friend struct S; +}; + +int main(){ + Q q; + S<int>::caller(&q); + return 0; +} |