clang ++ akzeptiert die Verwendung von Template-Template-Parametern nicht, wenn CRTP verwendet wird

Beim Versuch, den Basisklassenkonstruktor in der abgeleiteten Initialisierungsliste aufzurufen, wenn ein Vorlagenvorlagenparameter mit CRTP verwendet wird, treten Kompilierungsfehler auf.

Problem kann mit diesem Codeausschnitt repliziert werden:

template <template<class> class Derived, class T>
struct base
{
};

template <class T>
struct derived : public base<derived, T>
{
    derived()
        : base<derived, T>()
    { }
};

Die störende Fehlermeldung:

bug.cpp:10:16: error: template argument for template template parameter must be a class template or type alias template
        : base<derived, T>()
               ^
bug.cpp:10:11: error: expected class member or base class name
        : base<derived, T>()
          ^
bug.cpp:10:11: error: expected '{' or ','
3 errors generated.

Dieses Problem scheint nur auf clang (3.4) aufzutreten, nicht auf g ++ (4.8, 4.7, 4.6). Ich kompiliere auch mit -std = c ++ 11.

Dies ist das erste Mal, dass ich CRTP mit dem Template-Template-Parameter verwenden muss. Mache ich das in Ordnung und es ist ein Problem mit Clang ++ oder nicht?

In letzter Zeit vertraue ich mehr auf clang ++ - Fehlermeldungen als auf g ++!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage