Вывод типа относится к автоматическому выводу типа данных выражения в языке программирования.

До C++ 11 каждый тип данных нужно было явно объявлять во время компиляции, ограничивая значения выражения во время выполнения
, но после новой версии C++, включено много ключевых слов, что позволяет программисту оставить вывод типа самому компилятору.

Благодаря возможностям вывода типов мы можем тратить меньше времени на запись того, что компилятор уже знает. Поскольку все типы выводятся только на этапе компиляции, время компиляции немного увеличивается, но это не влияет на время выполнения программы.

спецификаторы типа заполнителя (начиная с C++11)

Для переменных указывает, что тип объявляемой переменной будет автоматически выведен из ее инициализатора.

Для функций указывает, что тип возвращаемого значения будет выведен из его операторов возврата. (начиная с C++14)
Для параметров шаблона, не являющихся типом, указывает, что тип будет выведен из аргумента. (начиная с С++ 17)

(1) auto (начиная с C++11), (2) ограничение типа auto (начиная с C++20)

(1), (2) тип выводится по правилам вывода шаблонного аргумента

(3) decltype(auto) (начиная с C++14), (4) ограничение типа decltype(auto) (начиная с C++20)

(3), (4) тип — decltype(e), где e — инициализация