Avatar ·

¿Qué nuevas características aparecieron en C++17 y cómo usarlas en proyectos reales?

¡Hola a todos! Llevo aproximadamente un año escribiendo en C++, principalmente usando C++11/14. Recientemente empecé a estudiar C++17 y noté que mucho código en proyectos open-source usa construcciones que no entiendo. Por ejemplo, a menudo veo código así:
auto [x, y, z] = getPoint();
O esto:
if (auto it = map.find(key); it != map.end()) { ... }
O también:
std::variant<int, float, std::string> v = 42;
Mi pregunta: ¿qué novedades trajo exactamente C++17? He oído sobre structured bindings, if-init, std::variant, std::optional, pero ¿cómo funciona todo esto en la práctica? ¿Hay algo más que valga la pena saber? Me interesan especialmente: 1. ¿Qué features realmente simplifican el desarrollo diario? 2. ¿Qué cambió en la biblioteca estándar? 3. ¿Hay algún problema al migrar de C++14 a C++17? Agradecería un análisis detallado con ejemplos de código. Quiero entender qué features vale la pena implementar en mis proyectos y cuáles evitar por ahora.