LoliDeveloper, дружественность тут не поможет. Предварительно объявить класс можно только в уже определенном пространстве имен, но не в предварительно объявленном. Дружественность тоже является формой предварительного объявления.
have_a_nice_day13 , если внутренний тип требуется для определения за пределами своего внешнего типа, то такой тип должен перестать быть внутренним.
У тебя, на самом деле, есть только один способ сделать так, как ты хочешь. Тебе нужно вынести data_t за пределы типа test_t, в какое-нибудь третье пространство имен (например internal). После этого в своих test_t и other_test_t просто сделать using data_t = internal::data_t;. И будет уже не важно, какой тест за каким следует.