Visual C ++ ошибка с классом шаблона друга в C ++ 11 - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть кусок кода, который работает с 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 голосов
/ 22 сентября 2018

Правильное написание параметров шаблона должно помочь:

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

Обратите внимание, что неправильное объявление A в качестве друга делает программу некорректной, диагностика не требуется.

...