Я изучаю шаблоны функций только сейчас, и я хотел немного изучить правила создания шаблонов функций.Итак, я написал следующий код:
#include <iostream>
template <typename>
int check(int x) {
return x * 2;
}
int main() {
std::cout << check<double>(10) << std::endl; // #1
std::cout << check<>(10) << std::endl; // #2
std::cout << check(10) << std::endl; // #3
return 0;
}
Строки # 1, # 2 и # 3 не скомпилированы все вместе, при каждой попытке я оставляю только одну из них и комментирую остальные.Итак, когда # 1 включен, у меня нет ошибок компиляции, и выводится правильный ответ «20».Как я понимаю, "check <" double ">" вызывает механизм создания шаблона, поэтому функция "int check (int)" действительно создана (тип параметра шаблона не имеетлюбое влияние).Когда # 3 включен, у меня ошибка компиляции "ошибка: не найдена соответствующая функция для вызова 'check (int)'" , что разумно, так как я пытаюсь вызвать "check(int) " функция, которая не существует.Мой вопрос касается случая № 2: в этом случае я получаю ту же самую ошибку ": нет соответствующей функции для вызова 'check (int)'" .Разве не должен вызывать "check <> (10)" механизм запуска шаблона также?