El estándar C++26 introduce std::copyable_function como sucesor de std::function, corrigiendo problemas históricos de diseño: una API sobredimensionada, una operator() const engañosa y excepciones por violaciones de precondición. Sin embargo, copyable_function sigue siendo interconvertible con std::function en ambas direcciones, lo que abre un riesgo de eficiencia sutil. Cuando un objeto se mueve entre ambos tipos sin conocimiento mutuo, cada conversión puede apilar una nueva capa de indirección: el resultado es una cadena de wrappers que crece en cada iteración. El autor ilustra el problema con un escenario de "handler callback" en el que una función actualizada a C++26 convive con código antiguo basado en std::function. Un benchmark con libstdc++ (GCC 16) muestra cómo cada 10.000 invocaciones el tiempo de llamada aumenta unos 100 microsegundos, además de acumular kilobytes de memoria sin motivo. A fecha de julio de 2026, libstdc++ es el único de los tres grandes proveedores de STL que ha implementado copyable_function, y lo hace con la variante ineficiente. Microsoft STL, en cambio, evita esta fuga lógica de memoria al hacer interoperar move_only_function y function; libc++ aún no ha implementado ninguno de los dos. El texto también advierte sobre el mismo riesgo al diseñar tipos propios con borrado de tipo, recomendando pruebas unitarias que cubran la copia desde referencias normales, constantes, rvalue y rvalue constantes.
