The left-hand side of the dot operator shall be of scalar type
. The
left-hand side of the arrow operator shall be of pointer to scalar type
. This scalar type is the object type
. The
cv-unqualified
versions of the object type and of the type designated by the
pseudo-destructor-name shall be the same type
. nested-name-specifieropt type-name :: ~ type-name
shall designate the same scalar type (ignoring cv-qualification)
.