Невозможно написать то, что вы хотите напрямую, потому что имя типа еще не завершено в тот момент, когда вы хотите его использовать.Вы даже не можете обойти это с помощью typedef
, потому что невозможно перенаправить объявление typedefs.
Я рекомендую просто написать структуру:
struct Recursive { std::shared_ptr<Recursive> first; int second; };
Или унаследовать от pair
как рекомендует комментарий Игоря :
Лучшее, что я могу придумать, это struct ThisPairType : std::pair<std::shared_ptr<ThisPairType>, int> {};
Что не совсем то, что вы хотите, но близко.