C ++ 11 не поддерживает возвраты типа auto&
.
Так что вы можете просто указать типы.
Для multi_index()
у вас есть возвращаемое значение multi_index_t<size>
, где size
равно sizeof...(index_t)
, поэтому вы можете написать
template<typename ... index_t>
multi_index_t<sizeof...(index_t)> multi_index(index_t&& ... index)
Согласно этому ответу, вы не можете рекурсивно развернуть шаблон функции с помощью decltype
.
Правильно, но я не вижу рекурсии в вашей multi_index()
функции, поэтому не вижу, как применить рекурсию к decltype()
.
Если вы действительно хотите (но почему?), Вы можете явно указать возвращаемый тип через decltype()
следующим образом
template<typename ... index_t>
auto multi_index(index_t&& ... index)
-> decltype( multi_index_t<sizeof...(index_t)>
{ std::array<int, sizeof...(index_t)>
{{ std::forward<index_t>(index) ... }} } )
но я не вижу причины делать это вместо просто явного multi_index_t<sizeof...(index_t)>