Запутанный typedef включает класс

Я читаю код проекта С++ и содержит код следующего вида:

namespace ns {
    class A {};
    class B {};
}

struct C {
    typedef ns::A* ns::B::* type;
};

Может кто-нибудь объяснить смысл строки typedef? type кажется своего рода указателем на член ns::B, который указывает на ns::A, но я не уверен.

Класс A и B в реальном коде не пуст, но я думаю, что это не актуально. И вот живой пример.

Ответ 1

ns::B::*

является переменной-указателем-членом-членом B. Тогда ns::A* - его тип.

Таким образом, вся декларация означает

указатель-член-переменная B типа ns::A*

Ответ 2

Ответ от @vsoftco уже отвечает на суть вопроса. Этот ответ показывает, как можно использовать такой typedef.

#include <iostream>
#include <cstddef>

namespace ns {

   struct A {};

   struct B
   {
      A* a1;
      A* a2;
   };
}

struct C {
   typedef ns::A* ns::B::*type;
};

int main()
{
   C::type ptr1 = &ns::B::a1;
   C::type ptr2 = &ns::B::a2;

   ns::B b1;
   b1.*ptr1 = new ns::A; // Samething as b1.a1 = new ns::A;

   return 0;
}