Нет. Проблема в том, что пакет Idx...
слишком жадный, чтобы оставить что-нибудь на s
. Вы можете использовать s, Idx...
, чтобы получить первое значение, но вы не можете использовать Idx..., s
, чтобы получить последнее. TypeIdentity
в этом вам не поможет, и вам понадобятся другие уловки.
Например, распаковка в массив (C ++ 14):
template<std::size_t first, std::size_t... rest>
void foo(std::index_sequence<first, rest...>) {
const std::size_t indices[]{first, rest...};
const std::size_t last = indices[sizeof...(rest)];
std::cout << last << std::endl;
}
или использование кратное выражение с оператором запятой (C ++ 17):
template<std::size_t first, std::size_t... rest>
void foo(index_sequence<first, rest...>) {
const std::size_t last = (first, ..., rest);
std::cout << last << std::endl;
}
Я изолировал first
, чтобы убедиться, что весь пакет first, rest...
никогда не бывает пустым.