Der folgende Code nicht auf gcc 4.5.3Spezialisierung der Mitgliedsfunktionsvorlage nach der Instanzierung Fehler, und die Reihenfolge der Elementfunktionen
struct Frobnigator
{
template<typename T>
void foo();
template<typename T>
void bar();
};
template<typename T>
void Frobnigator::bar()
{
}
template<typename T>
void Frobnigator::foo()
{
bar<T>();
}
template<> // error
void Frobnigator::foo<bool>()
{
bar<bool>();
}
template<>
void Frobnigator::bar<bool>()
{
}
int main()
{
}
Fehlermeldung zu kompilieren: specialization of ‘void Frobnigator::bar() [with T = bool]’ after instantiation
. Ich löste dieses Problem schließlich, indem ich die Spezialisierung Frobnigator::bar<bool>()
vor Frobnigator::foo<bool>()
erscheinen ließ. Offensichtlich ist die Reihenfolge, in der die Methoden erscheinen, von Bedeutung.
Warum dann ist die folgende Lite-Version des obigen Codes, in dem die Spezialisierung von bar
nach der generischen Version erscheint, gültig?
struct Frobnigator
{
template<typename T>
void foo();
};
template<typename T>
void Frobnigator::bar()
{
}
template<>
void Frobnigator::bar<bool>()
{
}
int main()
{
}