A indexação de pacotes foi introduzida no C++ 26 e eu esperava que esse recurso tivesse um impacto significativo nas coisas de metaprogramação, especialmente para indexação de pacotes que, de outra forma, exigiriam soluções alternativas.
Como a sintaxe do especificador de indexação de pacotes é:
typedef-name ... [ expression ]
- onde
typedef-name
estáidentifier
ousimple-template-id
Com as informações acima, permite ter como:
template <typename>
using apply_t = bool;
// #1
template <typename... Args>
using A = apply_t<Args>...[0];
// can be reworked with: apply_t<Args...[0]>
// #2
template <template <typename...> typename... Temps>
using B = Temps<>...[0]
// no other way other than this because 'Temps...[0]<>' is not allowed yet (?)
Não : embora typedef-name inclua simple-template-id como uma produção gramatical, neste contexto é necessário ([dcl.type.pack.index]/1) nomear um pacote (e
Temps<>
não é em si um pacote).Observe que a proposta discute a indexação em pacotes de parâmetros de modelo (e até mesmo novos tipos de pacotes) como uma extensão futura.