Здравствуйте, rg45, Вы писали:
R>Давай порассуждаем?
R>Легально ли такое использование, или его следует запретить?
R>R> D d{};
R> auto m = &A::a;
R> std::cout << d.*m << std::endl;
R>
Уже позно запрещать. Не нужно было вводить указатели на неведомую фигню.
У вас есть указатель на typedef? Тут примерно тоже самое. Сами себе создали проблемы и потом в лучщих традициях: породили новую сущность, породили методы работы с ней, но они не стыкуются с уже имеющимися,а и так сойдет.
struct A { int x[2]; };
struct B { A a[2]; };
Вот как записать указатель на поле B::a[1].x[1]. Обычного смещения относительно B было бы достаточно.
struct A { int *x; };
struct B { A *a; };
А вот для такого указателя на поле B::a[1].x[1]. Уже было бы достаточно ввести метод получения адреса, собственно и указатель бы был указателем на этот метод. Но нет это слишком просто.