Я наткнулся на этот вопрос, у которого был ответ, который использовал нечетную конструкцию:
typedef std::queue<int> Q;
typedef Q::container_type C;
C & get (Q &q)
{
struct hack : private Q {
static C & get (Q &q) {
return q.*&hack::c;
}
};
return hack::get(q);
}
Я обычно следую за тем, что q имеет доступ к своему собственному элементу c, на который ссылается функция get. Но я затрудняюсь это объяснить. Что происходит именно с .*&, и почему это разрешено?