Здравствуйте, kov_serg, Вы писали:
_>Еще вариант где мешает. Если бы был int D::* то
_>_> int* (*p1)(D*)=ptr_to<&D::a>; // я бы мог писать так
_> int* (*p2)(A*)=ptr_to<&D::a>; // а пиходится так
_>
_>То есть что бы работало в общем виде придётся писать ptr_to<D,&D::a>
_>ps: И тогда можно вместо offset спокойно использовать этот указатель, при желании преобразовав его в intptr_t
Твою мотивацию я понял. Тем не менее, несмотря на определенные неудобства, концептуально более чистым мне видится текущая имплементация, когда выражения &D::a и &A::a имеют один и тот же тип и одно и то же значение. В то же время, достаточно веских доводов для того, чтобы отстаивать свою позицию у меня нет. Скорее всего, это просто привычка и закреплённый временем и практикой стереотип.