Он служит заявлением о намерениях -
в приведенном выше примере класс Lorem
предназначен для подсчета ссылок
через boost :: shared_ptr и хранится в
вектор.
Это именно то, что он делает не делает.
Если я вижу 'Foo :: Ptr' в коде, я абсолютно не знаю, является ли он shared_ptr или Foo * (STL имеет :: pointer typedefs типа T *, помните) или что-то еще. Esp. если это разделяемый указатель, я вообще не предоставляю typedef, но оставляю явное использование shared_ptr в коде.
На самом деле я почти никогда не использую typedefs вне шаблонного метапрограммирования.
STL делает подобные вещи постоянно
Проект STL с концепциями, определенными в терминах функций-членов и вложенных typedef, является историческим тупиком, современные библиотеки шаблонов используют бесплатные функции и классы признаков (см. Boost.Graph), потому что они не исключают встроенные в типах от моделирования концепции и потому, что это облегчает адаптацию типов, которые не были разработаны с учетом концепций данных библиотек шаблонов.
Не используйте STL в качестве причины для совершения таких же ошибок.