在以下代码中,main() 中的 'bObj->b()' 行编译,但 'cObj->c()' 行给出错误 'expected primary-expression before '>' token'。这与依赖类型无关;在适当的位置添加“模板”或“类型名称”没有帮助。关于问题所在的任何提示?在此代码的“真实”版本中,函数“b”还有许多其他模板和非模板版本。问题可能只发生在一个地方而不是其他地方,但我无法确定可能是什么重要的区别。
#include <boost/shared_ptr.hpp>
class A {};
class D : public A {};
class B
{
public:
template <class T> boost::shared_ptr<T> b() { return boost::shared_ptr<T>(); }
};
class C
{
public:
boost::shared_ptr<A> b() { return boost::shared_ptr<A>(); }
};
int main(int, char **)
{
boost::shared_ptr<C> cObj(new C);
boost::shared_ptr<B> bObj = boost::dynamic_pointer_cast<B>(cObj);
bObj->b<D>();
cObj->b<D>();
}