Явная специализация членов шаблонов классов

Пытаясь закрепить логику явной специализации членов шаблонов классов, я написал следующий код:

#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» несовместим с объявлением

Может кто-нибудь объяснить мне, что здесь происходит? Спасибо!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector