operator zwracałby typ referencyjny tylko jeśli zadeklarowany typ wyrażenia zawierałby referencję. Aby podkreślić, że dedukowany typ pochodzi od „deklarowanego typu” wyrażenia, nazwa zaproponowanego operatora to decltype.
Jednym z najczęściej cytowanych motywów wprowadzenia proponowanego operatora decltype była możliwość zapisu w szablonach idealnych funkcji przekierowujących. Jest czasami pożądane, aby utworzyć uogólnioną funkcję przekierowującą, która zwraca taki sam typ wyniku jak funkcja docelowa bez względu na rodzaj jego tworzenia. Bez decltype, nie jest to w ogólności możliwe. Przykład stosujący również nową składnie deklaracji i definicji funkcji:
int& foo(int& i); float foo(float& f);
template <class T> auto transparent_forwarder(T& t) −> decltype(foo(t)) { return foo(t); }
Istotą operatora decltype w powyższym przykładzie jest zachowanie informacji o tym czy docelowa funkcja zwraca typ referencyjny.
Semantyka Podobnie jak w operatorze sizeof, operand decltype nie jest wykonywany.