ただ興味があるだけ:
次のサンプルでは、 の代わりに何を意味するかを示してい/*implicit*/
ます。空白のままにする回避策はありますか?ご覧のとおり、typename T を最初にすることはできません。
template<typename C1, typename C2, typename T = decltype(typename C1::value_type() * typename C2::value_type())>
T dot(const C1 &v1, const C2 &v2);
int main()
{
std::vector<float> vec1;
std::vector<double> vec2;
// typical:
auto result1 = dot(vec1, vec2); // auto -> double
// avoid numerical unstable situations:
auto result2 = dot</*implicit*/,/*implicit*/,long double>(vec1, vec2); // auto -> long double
//auto result2 = dot<decltype(vec1),decltype(vec2),long double>(vec1, vec2);
}
最後の行で、超肥大化しないソリューションを提供します。