Nieformalnie, typ zwracany przez decltype jest wydedukowany następująco: jeśli wyrażenie e odwołuje się do zmiennej w zakresie lokalnym lub w przestrzeni nazw, statycznej zmiennej klasy lub parametru funkcji, to wynikiem jest zadeklarowany typ zmiennej lub parametru jeśli e jest wywołaniem funkcji lub użyciem przeciążonego operatora, decltype(e) oznacza zadeklarowany typ wyniku tej funkcji w przeciwnym razie, jeśli e to l-wartość, decltype(e) to T&, gdzie T jest typem e; jeśli e jest r-wartością, to wynikiem jest T.
Semantyka została tak zaprojektowana, aby spełnić oczekiwania autorów bibliotek z kodem uogólnionym, a ponadto jest intuicyjna dla początkujących programistów, ponieważ zwracany typ przez decltype zawsze dokładnie zgadza się z typem obiektu lub funkcji zadeklarowanym w kodzie źródłowym. Bardziej formalnie, reguła #1 ma zastosowanie do beznawiasowych id-expression i wyrażeń dostępu do składowych klasy. Dla wywołań funkcji wydedukowany typ to typ zwracany przez statycznie wybraną funkcję, określoną według reguł przeciążania funkcji.