¿El mandato estándar enable_shared_from_this se hereda públicamente? ¿Por qué?

Es común heredar deenable_shared_from_this solo para poder regresarshared_ptr's de las funciones de los miembros como la intención principal, sin intención de exponerenable_shared_from_this API en la clase derivada.

Desde hacer uso deenable_shared_from_this uno debe hacerlo a través de la herencia pública (¿el estándar exige esto? ¿Cuál es la razón?), esto no se puede lograr yenable_shared_from_this La API se fuerza a la clase pública API derivada.

Inherenteenable_shared_from_this en privado y haciendoshared_ptr una clase de amigo funciona en clang junto con libc ++, pero no funciona con stdlibc ++.

Ya queprivate enable_shared_from_this + friend shared_ptr (o herencia protegida) parece cubrir este caso de uso, ¿no debería ser suficiente según el estándar para ajustarse como una solución para el problema "compartido de este"?

Respuestas a la pregunta(1)

Su respuesta a la pregunta