// { dg-do compile } namespace boost_no_member_template_friends{ template class foobar; template class foo { private: template friend class foobar; template friend class foo; template friend bool must_be_friend_proc(const foo& f); int i; public: foo(){ i = 0; } template foo(const foo& f){ i = f.i; } }; template class foo; template bool must_be_friend_proc(const foo& f); template bool must_be_friend_proc(const foo& f) { return f.i != 0; } template class foobar { int i; public: template foobar(const foo& f) { i = f.i; } }; int test() { foo fi; foo fd(fi); (void) &fd; // avoid "unused variable" warning foobar fb(fi); (void) &fb; // avoid "unused variable" warning return 0; } }