Параметр шаблона C указывает второй

#c #c 17

#c #c 17

Вопрос:

это мой код:

 template <typename T, int index>
int echo(T t) {
    return index - 1;
}
echo<3>(1); // error: invalid template argument for 'T', type expected
  

Я думаю, что компилятор полностью способен выводить T .
Как я могу использовать echo , когда T это первый параметр шаблона, кроме приведенного ниже:

 echo<decltype(x), 3>(x);
  

Комментарии:

1. Поменяйте местами параметры и поместите индекс первым?

2. Поменять T местами и index можно решить, но я хочу знать решение, когда T оно будет первым.

3. вы не можете, могут быть выведены только параметры после явно указанных

4. Это похоже на аргументы функции по умолчанию. Вы можете не указывать их в вызове, но только в том случае, если все последующие также опущены.

5. У вас все еще есть возможность написать шаблон-оболочку, который просто меняет местами аргументы шаблона: demo на coliru