我从 gcc 4.6 收到关于模板成员函数的真正奇怪的错误消息。这是一个最小的例子:
template<typename T>
class Pimpl
{
public:
Pimpl(const Pimpl&) {}
private:
T* clone_(const T*);
};
template<typename T>
template<typename P>
T*
Pimpl<T>::clone_(const T*)
{
return new P(static_cast<const P&>(*p));
}
这是错误:
$ c++ -c y.cpp
y.cpp:14:1: error: prototype for ‘T* Pimpl<T>::clone_(const T*)’ does not match any in class ‘Pimpl<T>’
y.cpp:8:8: error: candidate is: T* Pimpl<T>::clone_(const T*)
请注意,不匹配的原型与候选原型完全相同。
是什么赋予了?