| // { dg-do assemble } |
| |
| // by Alexandre Oliva <oliva@dcc.unicamp.br> |
| |
| // I'm not 100% sure this program is correct, but g++ shouldn't just |
| // crash. |
| |
| // The idea is to give privileged access to bar<A> only to |
| // specializations foo<A,B>, for all B. |
| |
| template <class A, class B> void foo(); |
| template <class C> class bar { |
| int i; // { dg-error "" } private |
| template <class B> friend void foo<C,B>(); // { dg-error "" } bogus declaration |
| }; |
| template <class A, class B> void foo() { |
| bar<A> baz; baz.i = 1; // { dg-error "" } foo cannot access bar<int>::i |
| bar<int> buz; buz.i = 1; // { dg-error "" } foo cannot access bar<int>::i |
| } |
| int main() { |
| foo<void,void>(); |
| foo<int,void>(); |
| } |