template
関数がclass
呼び出された場合にのみインスタンス化されるという間違った認識がありました。以下の簡単なコードを参照してください。
template<typename T>
struct A
{
T *p;
T& operator * () { return *p; }
};
int main ()
{
A<int> ai; // ok
int i = *ai; // works fine
A<void> av; // compiler complains even "*av" is not called
}
を宣言している間A<void>
、コンパイラは次のようにエラーを出します:
error: forming reference to void
void
以下のように、テンプレートの外側に関数を特化しようとしました。
template<>
void A<void>::operator * () {}
しかし、それは役に立たず、次のようなエラーが発生します:
error: no member function ‘operator*’ declared in ‘A<void>’
これを C++03 で修正する方法はありますか?