7

次のコードの何が問題になっていますか?

template<typename X>
struct A {
        template<int N>
        int foo() const {
                return N;
        }
};

template<typename X>
struct B {
        int bar(const A<X>& v) {
                return v.foo<13>();
        }
};

#include <iostream>
using std::cout;
using std::endl;

int main() {
        A<double> a;
        B<double> b;
        cout << b.bar(a) << endl;
        return 0;
}

関数内B::barでコンパイラは文句を言います:

エラー:タイプ''および'int'の無効なオペランドから二項'演算子<'</ p>

Aがテンプレートでない場合、すべてが正常にコンパイルされます。

4

1 に答える 1

15

は依存名であるためにに変更return v.foo<13>();し、構文を使用して明示的に言及する必要があります。return v.template foo<13>();foo.template

于 2010-09-11T14:55:12.083 に答える