0

このことを考慮:

template < typename VectorType >
void ff()
{
    // This passes.
    typedef typename VectorType::value_type VV;
    typedef int VV::* MM;

    // This FAILS!??
    typedef int typename VectorType::value_type::* MMM;
}

2番目が失敗する理由と、1つのtypedefステートメントで目的のtypedefを取得する正しい方法は何ですか?

私のコンパイラは GCC-4.7.2 です。

4

1 に答える 1

2

コメントで指摘されているように、typenameあるべきではない場所があります。

typedef int typename VectorType::value_type::* MMM;

ちょうどあるべきです:

typedef int VectorType::value_type::* MMM;

typenamea::bテンプレート内にある場合に使用されa、テンプレートパラメーターに依存しb、タイプです。その場合、typename a::bこの事実をコンパイラに伝えるために を使用する必要があります。

これは、型でなければならないa::b::*明確な指標であるため、ここでは使用できません。btypename

于 2013-10-09T09:32:58.573 に答える