typedef aus Templateklassen als friend
-
Mich würde mal interessieren, was davon richtig ist bzw. ob überhaupt:
struct X {}; struct Y {}; template <typename T, class U> class Foo { //... }; template <typename T> class Bar { public: typedef Foo<T, X> XFoo; typedef Foo<T, Y> YFoo; }; template <typename T> class FooNeedsAccess { friend class Bar<T>::Xfoo; friend class Bar<T>::YFoo; };Das nimmt der gcc-Compiler. Wenn ich das aber dem Visual Studio-Compiler zu fressen gebe, dann meckert er. Er möchte das lieber so:
//... Wie oben template <typename T> class FooNeedsAccess { friend typename Bar<T>::Xfoo; friend typename Bar<T>::YFoo; };Was ist denn nun davon richtig/bzw. überhaupt erlaubt. Im Standard hab ich nur gefunden, dass man keine Template-Parameter als friend benutzen darf D.h.:
template <typename T> class Foo { friend class T; };PS: Ich weiß, dass es bessere Lösungen gibt, aber ich bin da irgendwie drüber gestolpert :p
-
viande schrieb:
Mich würde mal interessieren, was davon richtig ist bzw. ob überhaupt:
Keines ist richtig. typedefs sind in einer friend-Deklaration nicht erlaubt.
-
Gut, das habe ich mir schon fast gedacht. War eh nur Faulheit, sind aber schon verbannt.