この関数テンプレートがあるとします。
template<typename T1, typename T2>
auto DoSomething(const T1& arg);
もちろん、この関数には末尾の戻り型が必要ですが、関数の目的を考えると、私は本当に正しく理解できませんでした。
この関数が行うことになっているのは、オブジェクトを使用arg
して何らかの操作を実行し、その操作の結果を関数の戻り値として使用することです。明らかに、のリターンタイプは、実行された操作のリターンタイプおよびオブジェクトと(互換的に)一致する必要があります。arg
T2
DoSomething()
arg
T2
ここでも、DoSomething()
乗算などの実際の操作を実行するとします。次にDoSomething()
、次のコードのように記述します。
template<typename T1, typename T2>
auto DoSomething(const T1& arg) -> /* trailing return-type */ {
T2 t2Obj; // Or have it obtained in some other way
return arg * t2Obj;
}
次に、このための末尾のリターンタイプをどのように形成する必要がありますか?
PS:トレーリングリターンタイプには、、およびその他の非常に奇妙な外観のをdecltype(arg * T2)
使用decltype(T1 * T2)
しdecltype(T1::operator * (T2))
てみました。decltype
それらのどれも機能しませんでした。