Почему вывод аргумента шаблона здесь не работает?

Я создал две простые функции, которые получают параметры шаблона и пустую структуру, определяющую тип:

//S::type results in T&
template 
struct S
{
    typedef typename T& type;
};

//Example 1: get one parameter by reference and return it by value
template 
A
temp(typename S<a>::type a1)
{
    return a1;
}

//Example 2: get two parameters by reference, perform the sum and return it
template 
B
temp2(typename S</a><a>::type a1, B a2)//typename struct S::type a2)
{
    return a1 + a2;
}
</a>

Тип аргумента применяется к struct S для получения ссылки. Я вызываю их с некоторыми целочисленными значениями, но компилятор не может вывести аргументы:

int main()
{
    char c=6;
    int d=7;
    int res = temp(c);
    int res2 = temp2(d,7);
}

Ошибка 1 ошибка C2783: 'Temp (S :: type) ' : не удалось вывести аргумент шаблона для 'A'

Ошибка 2, ошибка C2783: 'B temp2 (S :: type, B) ' : не удалось вывести аргумент шаблона для 'A'

Почему это происходит? Трудно ли увидеть, что аргументы шаблонаголец а такжеИНТ ценности?

Ответы на вопрос(3)

Ваш ответ на вопрос