Quais novos recursos surgiram no C++17 e como usá-los em projetos reais?
Olá a todos! Escrevo em C++ há cerca de um ano, usando principalmente C++11/14. Recentemente comecei a estudar C++17 e notei que muito código em projetos open-source usa construções que não entendo.
Por exemplo, vejo frequentemente este código:
auto [x, y, z] = getPoint();
Ou isto:
if (auto it = map.find(key); it != map.end()) { ... }
E também:
std::variant<int, float, std::string> v = 42;
Minha pergunta: quais exatamente foram as novidades trazidas pelo C++17? Ouvi falar sobre structured bindings, if-init, std::variant, std::optional, mas como tudo isso funciona na prática? Há mais algo que vale a pena saber?
Estou especialmente interessado em:
1. Quais features realmente simplificam o desenvolvimento diário?
2. O que mudou na biblioteca padrão?
3. Existem algumas armadilhas ao migrar de C++14 para C++17?
Agradeço por uma análise detalhada com exemplos de código. Quero entender quais features vale a pena adotar em meus projetos e quais evitar por enquanto.