Code
#include <iostream>
int main()
{
int a=3;
int *p=&a;
decltype (a) k1;
decltype (*p) k2;
return 0;
}
Output
Declaration of reference variable 'k2' requires an initializer
Explanation given to such phenomena is " decltype returns a reference type for expression that yield objects that can stand on the LHS of the assignment"
see what *p yields value of of the object it points means 3 and what a yields value of itself which is 3.
Now we talk manipulatively that *p refers to object a then a also refers to a itself.
So I am not digesting the explanation given for such phenomena.