Przykład:
const int&& foo(); int i; struct A { double x; }; const A* a = new A(); decltype(foo()) x1; // typ to const int&& decltype(i) x2; // typ to int decltype(a->x) x3; // typ to double decltype((a->x)) x4; // typ to const double&
Powodem różnic w ostatnich dwóch wywołaniach decltype jest to, że wyrażenie w nawiasie (a->x) nie jest ani id-expression ani dostępem do skladowych klasy, a stąd nie oznacza nazwanego obiektu. Ponieważ to wyrażenie jest l-wartością, jego wydedukowany typ jest referencją do typu wyrażenia, czyli const double&.
W grudniu 2008 Jaakko Järvi zgłosił problem do komisji, że decltype nie można zastosować do utworzenia qualified-id, co jest niespójne z intencją, że decltype powinien być traktowany tak jakby był typedef-name. W odniesieniu do Committee Draft for C++0x, członek japońskiej ISO zauważył, że operator zakresu (::) nie może być zastosowany do decltype, a powinien. Byłoby to pożyteczne, żeby uzyskać typ bazowy w typie pochodnym z wystąpienia obiektu jak w przykładzie:
vector<int> v; decltype(v)::value_type i = 0;