T のコンストラクターについて心配する必要なく、decltype で T のインスタンスを取得するdeclval<T>()
という古いトリックの代わりにすぎませんか?(*(T*)NULL)
サンプルコードは次のとおりです。
struct A {};
struct B {
A a;
};
typedef decltype((*(B*)nullptr).a) T1;
typedef decltype(declval<B>().a) T2;
cout << "is_same: " << is_same<T1, T2>::value << endl;
T1 と T2 は同じ型であるため、1 が出力されます。
declval が代替品以上のものである場合、違いは何ですか?また、どこで役に立ちますか?