Wie soll ich eine statische Variable für eine Teilspezialisierung initialisieren?C++ Wie statische Variablen einer partiellen Template-Spezialisierung initialisiert werden
template <bool A=true, bool B=false>
struct from {
const static std::string value;
};
// no specialization - works
template <bool A, bool B>
const std::string from<A, B>::value = "";
// partial specialization - does not compile -
// Error: template argument list following class template name must list parameters in the order used in template parameter list
// Error: from<A,B>' : too few template arguments
template <bool B>
const std::string from<true, B>::value = "";
// full specialization - works
const std::string from<false, true>::value = "";
Warum funktioniert die Teilarbeit nicht?
EDIT: Ich habe eine Lösung gefunden, basierend auf Partial template specialization for initialization of static data members of template classes
ich die Erklärung für die partielle Spezialisierung wiederholen müssen, bevor sie mir die statische Variable zu initialisieren erlaubt:
template <bool B>
struct from<true, B> {
const static std::string value;
};
Auch hier ist die Frage, warum ?
Welcher Compiler? Auf [g ++ 4.3.4] (http://ideone.com/jM6sIb) funktioniert auch die letzte nicht. – didierc
Müssen Sie nicht auch die gesamte Klassenvorlage spezialisieren? Ich denke, dass nur explizite (= vollständige) Spezialisierung für Mitglieder erlaubt ist. –
Compiler war VS2010 –