decltype

decltypeを使うと、指定された式の型を取得することができる。

decltype - cpprefjp C++日本語リファレンス

decltypeで取得した型で変数宣言など、一般の型と同じように使える。

前回の、後置戻り値型に使ったり、

変数宣言に使ったり、

参照も判断できる。

$ vi decltype.cpp 
$ g++ decltype.cpp -o decltype -std=c++11
$ ./decltype 
str1 = ABC
typeid(str2).name() = NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
str2 = XYZ
ref2 = XYZ
str1 = XXX
str2 = YYY

typeid(ret).name() = f
ret = 10.5
$

str2やretのtypeidはちょっと独特だけど。

Sample/cpp/decltype/decltype/src/decltype at master · bg1bgst333/Sample · GitHub