template template kompiliert nicht
-
hallo,
ich habe mal folgendes Minimalbeispiel zu einem etwas umfangreicherem Problem gemacht:struct StaticText { }; template<typename T> struct SimpleControlTheme { }; struct SimpleTheme { }; template<template<class> class ControlThemeT, typename ThemeT> class ControlThemeCreator { public: template<typename WidgetT, template<class> class AllocatorT> ControlThemeT<WidgetT>* Create() const { return 0; }; }; struct Theme { template<typename CreatorT> Theme(CreatorT const& creator) { SimpleControlTheme<StaticText>* text = creator.Create<StaticText, std::allocator>(); // <----- } }; int main(int argc, char* argv[]) { ControlThemeCreator<SimpleControlTheme, SimpleTheme> creator; Theme theme(creator); return 0; }Sowohl Visual Studio als auch Sun Studio kompilieren den Quellcode anstandslos. G++ meckert aber rum:
error: expected primary-expression before ',' token error: expected initializer before '>' tokenBeide Meldungen verweisen auf die markierte Zeile.
Ich kann mit der Meldung wenig anfangen. Liegt das Problem jetzt am g++ oder an meinem Quellcode? Gibt es Verbesserungsvorschlaege (zur Behebung des Problems, nicht zur grundlegenden Umstrukturierung des Quellcodes o.ae.)?
Vielen Dank und viele Grüße,
g++loser
-
So nimmt er es an:
SimpleControlTheme<StaticText>* text = creator.template Create<StaticText, std::allocator>(); // <-----
-
CreatorT::Create ist ein abhängiges Template, folglich
SimpleControlTheme<StaticText>* text = creator.template Create<StaticText, std::allocator>();
-
Man lernt doch nie aus - so ein Konstrukt habe ich noch nie gesehen.
Ihr habt mir den (mittlerweile nur noch sehr kurzen) Tag gerettet!