Title
Pointer-to-member conversions
Status
drafting
Section
7.12 [conv.mem]
Submitter
Mike Stump

Created on 1999-09-16.00:00:00 last changed 210 months ago

Messages

Date: 2009-03-23.00:00:00

The descriptions of explicit (8.2.9 [expr.static.cast] paragraph 9) and implicit (7.12 [conv.mem] paragraph 2) pointer-to-member conversions differ in two significant ways:

  1. In a static_cast, a conversion in which the class in the target pointer-to-member type is a base of the class in which the member is declared is permitted and required to work correctly, as long as the resulting pointer-to-member is eventually dereferenced with an object whose dynamic type contains the member. That is, the class of the target pointer-to-member type is not required to contain the member referred to by the value being converted. The specification of implicit pointer-to-member conversion is silent on this question.

    (This situation cannot arise in an implicit pointer-to-member conversion where the source value is something like &X::f, since you can only implicitly convert from pointer-to-base-member to pointer-to-derived-member. However, if the source value is the result of an explicit "up-cast," the target type of the conversion might still not contain the member referred to by the source value.)

  2. The target type in a static_cast is allowed to be more cv-qualified than the source type; in an implicit conversion, however, the cv-qualifications of the two types are required to be identical.

The first difference seems like an oversight. It is not clear whether the latter difference is intentional or not.

(See also issue 794.)

History
Date User Action Args
2003-04-25 00:00:00adminsetstatus: open -> drafting
1999-09-16 00:00:00admincreate