tial proposal to the C++ standards committee outlined a combination of the two variants; the operator would return a reference type only if the declared type of the expression included a reference. To emphasize that the deduced type would reflect the "declared type" of the expression, the operator was proposed to be named decltype.[1]One of the cited main motivations for the decltype proposal, was the ability to write perfect forwarding function templates.[8] It is sometimes desirable to write a generic forwarding function that returns the same type as the wrapped function, regardless of the type it is instantiated with. Without decltype, it is not generally possible to accomplish this.[8] An example, which also utilizes the trailing-return-type:[8]int& foo(int& i);float foo(float& f);template <class T> auto transparent_forwarder(T& t) −> decltype(foo(t)) {  return foo(t);}decltype is essential here because it preserves the information about whether the wrapped function retur