次のコードビットは、エラーメッセージ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()
{
}
GCCでコンパイルすることができない:specialization of ‘void Frobnigator::bar() [with T = bool]’ after instantiation
。最終的にFrobnigator::foo<bool>()
の前にFrobnigator::bar<bool>()
の特殊化を表示することでこの問題を解決しました。明らかに、メソッドが問題に見える順序。
上記のコードのうち、bar
の特殊化がジェネリックバージョンの後に表示されるのはなぜですか?
struct Frobnigator
{
template<typename T>
void foo();
};
template<typename T>
void Frobnigator::bar()
{
}
template<>
void Frobnigator::bar<bool>()
{
}
int main()
{
}