Стандартный мандат enable_shared_from_this должен быть унаследован публично? Зачем?
Распространено наследование отenable_shared_from_this
просто чтобы иметь возможность вернутьсяshared_ptr
из функций-членов в качестве основного намерения, без намерения разоблаченияenable_shared_from_this
API в производном классе.
Так как использоватьenable_shared_from_this
нужно делать это через публичное наследование (предписывает ли стандарт это? каково обоснование?), этого нельзя достичь иenable_shared_from_this
API принудительно входит в публичный API производного класса.
Inherentingenable_shared_from_this
в частном порядке и делаяshared_ptr
класс друга работает на clang в сочетании с libc ++, но не работает с stdlibc ++.
посколькуprivate enable_shared_from_this
+ friend shared_ptr
(или защищенное наследование), по-видимому, покрывает этот вариант использования, разве этого не должно быть достаточно по стандарту для подгонки в качестве решения проблемы «общего от этого»?