decltype используется для получения типа выражения.
Основные случаи применения:
Определение возвращаемого типа функции после списка параметров ( trailing return type ):
c
Это позволяет определить тип возвращаемого значения на основе выражения, включающего параметры функции.
Получение типа переменной:
c
Получение типа выражения (не обязательно переменной):
c
В шаблонном метапрограммировании: Позволяет определять типы внутри шаблонных конструкций.
Связь с категорями выражений ( lvalue/rvalue ):
decltype(expr) возвращает тип T& для типа T.decltype(expr) возвращает тип T для типа T.decltype возвращает его объявленный тип (T), независимо от того, является ли оно lvalue.c
decltype вычисляет тип выражения во время компиляции, не вычисляя само выражение.