- O GCC 15 adicionou em massa recursos do C++26 e também melhorou alguns recursos do C++23
- Os principais acréscimos incluem Pack Indexing, Variadic Friends, especificação do motivo de exclusão, condicionais com structured bindings e mais
- Novas opções do compilador e avisos também foram introduzidos, melhorando a experiência do desenvolvedor
- O suporte a módulos C++ foi reforçado, e houve otimizações na velocidade de compilação de templates
- O GCC 15 foi adotado como compilador padrão do Fedora 42 e em breve também será oferecido no Red Hat GCC Toolset
Os novos recursos de C++ no GCC 15
- O GCC 15.1 foi lançado em 25 de abril de 2025 e introduz de forma ampla recursos do C++26
- O padrão padrão ainda é
gnu++17, e é possível ativar os recursos mais recentes com -std=c++23, -std=c++26 etc.
- Os recursos de C++20, C++23 e C++26 ainda são experimentais (experimental)
Principais recursos do C++26
-
Pack Indexing
- Agora é possível acessar diretamente um elemento específico em argumentos de variadic template com a sintaxe
pack...[N]
- Isso permite referenciar de forma limpa, por exemplo, o primeiro argumento sem truques de repetição
-
Especificação de atributos em Structured Bindings
- Agora é possível aplicar
[[attribute]] separadamente a cada variável em um structured binding
- Por exemplo, é possível marcar apenas uma variável associada como
[[deprecated]]
-
Adição de descrição a funções deletadas
- A sintaxe
= delete("motivo") permite fornecer uma mensagem no erro de chamada de uma função deletada
-
Variadic Friends
- Em classes template, agora é possível declarar vários tipos como
friend de uma só vez
- Isso é útil para reforçar o controle de acesso em padrões como o Passkey pattern
-
constexpr Placement New
- Agora é possível usar
std::allocator e placement new em contexto constexpr
-
Uso de structured bindings em condicionais
- Agora é possível declarar structured bindings dentro de condicionais
if, while e switch
- A avaliação da condição é feita por uma variável interna gerada pelo compilador
-
Proibição de excluir tipos incompletos
- Se
delete ou delete[] for usado em um tipo incompleto, ocorrerá erro de compilação no modo C++26
-
Aviso de vírgula de Oxford
- Em declarações de funções variádicas, o padrão de usar apenas
... sem , ... passa a gerar aviso no C++26
-
Remoção da comparação de arrays
- Código que compara arrays com
== passa a ser tratado como erro
- No C++20 isso era um aviso, mas agora foi elevado a erro de compilação no modo C++26
-
Diretiva #embed
- Suporte a
#embed, que permite inserir dados binários diretamente no código-fonte
Ainda não há comentários.