C++26 simplifica el patrón PImpl con std::indirect
The PImpl idiom and the C++26 std:indirect type
El patrón PImpl (puntero a implementación) oculta los detalles de una clase tras un puntero opaco para reducir dependencias de compilación. Tradicionalmente se implementa con punteros crudos o std::unique_ptr, pero ambos adolecen de problemas de propagación de const y de estados nulos tras un movimiento. C++26 introduce std::indirect, un tipo vocabulario que gestiona la memoria dinámica con semántica de valor: copia profunda, propagación de const y nunca es nulo (excepto tras un movimiento, comprobable con valueless_after_move()). El artículo compara las tres implementaciones y muestra cómo std::indirect simplifica el código y evita errores sutiles.
El tipo std::indirect posee un único objeto T asignado en el heap, pero se comporta como un miembro T: la const se propaga y nunca es nulo, lo que hace que el código sea más robusto frente a cambios accidentales.