У меня есть следующий код, который определяет структуру шаблона W
, которая экспортирует тип T
, основанный на аргументе шаблона в W
:
#include <iostream>
using namespace std;
template <unsigned N>
struct Y {};
template <unsigned N>
struct W {
using T = Y<N>;
};
Затем я определил эту шаблонную функцию, которая смотрит на этот тип T
:
template <unsigned N>
void foo (const typename W<N>::T& in) {
//--
}
Проблема здесь в том, что если я попытаюсь вызвать эту функцию из main
, используя один из типов, экспортированных как T
, она не будет компилироваться. Например, если я напишу
int main() {
Y<2> y;
foo(y);
return 0;
}
Я получаю сообщение об ошибке компилятора
Ошибка вывода / замены аргумента шаблона:
не удалось вывести параметр шаблона
Что тут происходит?