Когда вы явно указываете аргументы шаблона, вы должны указывать их по порядку, так же, как вы должны указывать аргументы функции в правильном порядке, даже если они установлены по умолчанию:
int *pi = CompileTimeCast<int*, const int*>(pA);
В этом примере, исходя из вашего исходного кода, ToType
равно int*
, а FromType
равно const int*
. Если вы явно укажете только подмножество аргументов шаблона, компилятор будет вынужден предположить, что ваше подмножество - это первые несколько аргументов шаблона по порядку. И все аргументов конечного шаблона должны быть выводимыми.
Обратите внимание, что для набора аргументов шаблона, который выводит компилятор, порядок не имеет значения. В вашем примере выводится only FromType
.
Вы нашли правильное обоснование для упорядочения аргументов шаблона: упорядочите их, уменьшив вероятность того, что ваш клиент захочет явно указать их при вызове вашей функции.