Из абзаца, на который вы ссылаетесь, мой акцент:
Если операнд является квалифицированным идентификатором с именем нестатического или вариантного члена
m
некоторого класса C
с типом T
, результат имеет тип «указатель на член»
класса C
типа T
”и является частным обозначением C::m
.
«Некоторый класс C
» означает, что он не обязательно должен быть того же класса, который указан квалифицированным идентификатором. В этом случае i
является членом A
и остается членом A
, даже если названо &B::i
. Следовательно, тип &B::i
равен int A::*
, что можно проверить с помощью теста
std::is_same<decltype(&B::i), int A::*>::value
Согласно [class.qual] / 1 , поиск членов следует алгоритму, описанному в [class.member.lookup] . Согласно правилам, которые проверяют подобъект, из которого происходит член i
, определяется класс C
. Поскольку i
является членом подобъекта A
, класс указателя на член определяется как A
.