Specjalizacja szablonu funkcji składowej po wystąpieniu błędu instancji i kolejności funkcji składowych
Następujący bit kodu nie kompiluje się na gcc 4.5.3
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()
{
}
Komunikat o błędzie:specialization of ‘void Frobnigator::bar() [with T = bool]’ after instantiation
. W końcu rozwiązałem ten problem dzięki specjalizacjiFrobnigator::bar<bool>()
pojawiać się wcześniejFrobnigator::foo<bool>()
. Oczywiście kolejność, w jakiej metody wydają się mieć znaczenie.
Dlaczego więc następująca wersja lite powyższego kodu, w której specjalizacjabar
pojawia się po wersji ogólnej, ważne?
struct Frobnigator
{
template<typename T>
void foo();
};
template<typename T>
void Frobnigator::bar()
{
}
template<>
void Frobnigator::bar<bool>()
{
}
int main()
{
}