C ++ 11中的朋友模板类的Visual C ++错误

时间:2018-09-22 10:19:56

标签: c++ c++11 visual-c++ g++ clang++

我有一段适用于g ++ / clang ++的代码。最近有消息告诉我,它与Visual C ++无关。

代码是这样的:

namespace q {
    template <typename X, typename Y>
    struct A {};
}

template <typename X>
struct B {
    template <typename Y>
    friend struct q::A;
};

int main() {
    return 0;
}

VC ++返回以下错误:

source_file.cpp(9): error C2976: 'q::A': too few template arguments
source_file.cpp(3): note: see declaration of 'q::A'
source_file.cpp(10): note: see reference to class template instantiation 'B<X>' being compiled

谁是正确的?有便携式的方法吗?

1 个答案:

答案 0 :(得分:1)

正确编写模板参数应该会有所帮助:

template <typename X, typename Y>
friend struct q::A;

请注意,错误地将A声明为朋友会使程序格式错误,不需要进行诊断。