یکی از تفاوت هایی که بین decltype و auto وجود داره این هستش که decltype دقیقاً متغیری به ویژگی متغیر مرجع براتون تولید می کنه بر خلاف auto. به مثال زیر توجه کنید.
const string message = "Test";
const string& foo()
{
return message;
}
اگر شما تابع foo را به f1 نسبت بدید چی پیش میاد.
auto f1 = foo();
درواقع f1 به صورت زیر تعریف شده.
string f1;
اگر هم قصد داشته باشید که تعریف کاملاً همانند foo باشه .
const auto& f1 = foo();
حالا برای اینکه این کارو انجام ندیدیم از decltype استفاده می کنیم.
decltype(foo()) f2 = foo();
حالا توی c++14 از این هم ساده تر شده :
decltype(auto) f3 = foo();