我错误地认为template
a 中的函数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 解决这个问题?