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 '>' token
    

    Beide 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>(); // <-----
    

  • Mod

    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!


Anmelden zum Antworten