次のコードでは、main() の 'bObj->b()' 行はコンパイルされますが、'cObj->c()' 行は '>' トークンの前にプライマリ式が必要です' というエラーが発生します。これは依存型とは関係ありません。適切な場所に「テンプレート」または「タイプ名」を追加しても役に立ちません。問題が何であるかについてのヒントはありますか?このコードの「実際の」バージョンには、関数「b」の他の多くのテンプレート バージョンと非テンプレート バージョンがあります。問題は 1 つの場所でのみ発生し、他の場所では発生しない可能性がありますが、何が重要な違いであるかを判断できませんでした。
#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>();
}