diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C b/gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C new file mode 100644 index 000000000..249ae8116 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C @@ -0,0 +1,45 @@ +// { dg-do assemble } +// GROUPS passed visibility +// Used to say: +// manip.cc:17: member `_f' is a private member of class `B<int>' +// manip.cc:17: member `_a' is a private member of class `B<int>' + +class A {}; + +template <class TP> +class B; + +template <class TP> +inline A & +operator<< (A &o, const B<TP> &m); + +template <class TP> +class B +{ + A &(*_f) (A &, TP); + TP _a; +public: + B (A &(*f) (A &, TP), TP a) : _f (f), _a (a) {} + friend A &operator<< <>(A &o, const B<TP> &m); +}; + +template <class TP> +inline A & +operator<< (A &o, const B<TP> &m) +{ + (*m._f) (o, m._a); + return o; +} + +A &setw (A &, int); +B<int> setw (int n) +{ + return B<int> (setw, n); +} + +A x; + +void f () +{ + x << setw (2); +} |