Пытаясь закрепить логику явной специализации членов шаблонов классов, я написал следующий код:
#include <iostream>
using namespace std;
template<class T> class X
{
public:
template<class U> class Y
{
public:
template<class V> void f(U,V);
void g(U);
};
};
template<> template<> template<class V>
void X<int>::Y<int>::f(int, V) {}
int main() {
X<int>::Y<int> b;
b.f(1, 1);
}
Компилируется без проблем. Но когда я ввожу изменения, показанные ниже, он отказывается компилироваться вообще:
#include <iostream>
using namespace std;
template<class T> class X
{
public:
template<class U> class Y
{
public:
template<class V> void f(U,V);
void g(U);
};
};
template<> template<class U> template<class V> // changes
void X<int>::Y<U>::f(U, V) {} // changes
int main() {
X<int>::Y<int> b;
b.f(1, 1);
}
Ошибка:
1> d: \ projects \ Programs \ youtube \ lesson \ lesson \ main.cpp (17): ошибка C3860: список аргументов шаблона после имени шаблона класса должен перечислять параметры в порядке, используемом в списке параметров шаблона
1> d: \ projects \ Programs \ youtube \ lesson \ lesson \ main.cpp (17): ошибка C3855: «X»: параметр шаблона «T» несовместим с объявлением
Может кто-нибудь объяснить мне, что здесь происходит? Спасибо!
Задача ещё не решена.
Других решений пока нет …