class foo { bar opposite(); };class bar { foo opposite(); };
class foo { class bar opposite(); };class bar { foo opposite(); };
class bar;class foo { bar opposite(); }class bar { foo opposite(); }
Code: [Select]class bar;class foo { bar opposite(); }class bar { foo opposite(); }Disclaimer: I have not tested this. It might give an incomplete type error.
Why do all the pro-Microsoft people have troll avatars?
Try returning a pointer, that's guaranteed to never fail, however incomplete.
class bar;class foo {void opposite(bar& result);friend bar do_foo_opposite(foo* self);}class bar { foo opposite(); }bar do_foo_opposite(foo* self) { bar b; self->opposite(b); return b;}