0

このサンプルを見てください:

struct parent
{
    template <typename t>
    inline static t get_t();
};

struct child : public parent
{
    template <typename t>
    inline static t get_t()
    {
        return t(-1);
    }
};

template <typename t>
struct call
{
    inline static int get_value()
    {
        return t::get_t<int>();
    }
};

typedef call< child > test;

int main()
{
    int v = test::get_value();
}

コードは次のエラーでコンパイルされます。

In static member function 'static int call<t>::get_value()':
  error: expected primary-expression before 'int'
  error: expected ';' before 'int'
  error: expected unqualified-id before '>' token

Visual C++ 2008 と Intel C++ でコードをコンパイルすると、問題なくコンパイルされます。

そのエラーはどういう意味ですか?

4

2 に答える 2

3

テンプレート修飾子が必要です:

return t::template get_t<int>();

見る:

「template」および「typename」キーワードをどこに、なぜ配置する必要があるのですか?

于 2013-04-03T16:12:00.813 に答える
0

追加するだけ

テンプレート

キーワード:

template <typename t>
struct call
{
    inline static int get_value()
    {
        return t::template get_t<int>();
    }
};
于 2013-04-03T16:14:58.777 に答える