
On 9/21/05 9:38 PM, "David Abrahams" <dave@boost-consulting.com> wrote:
Ariel Badichi <abadichi@bezeqint.net> writes:
David Abrahams wrote:
it's easy to arrange that only a literal zero works there.
How?
Allow assignment only from a private member pointer type. It's similar to the operator safe_bool idiom.
I thought you might mean that. That allows more than a literal zero, though (e.g., 5 * 5 - 25).
Yikes! I didn't know that. Too bad!
Maybe it's not as "too bad" as you two think. You can use more than a literal zero for the conventional null-pointer too! Any integral expression that can be resolved at compile time that evaluates to zero can be used: void * x = 20 - 22 + 2; // works as NULL pointer! See section 4.10, paragraph 1 of the standard. (Also see s4.11-p1 and s5.19-p1.) So allowing this case is not any more surprising than the rules for built-in pointers.
By the way, that might work well for smart pointers; why don't shared_ptr and friends use this idiom?
Maybe because it allows more than a literal zero?
If that's the reason, maybe it could be re-evaluated. -- Daryle Walker Mac, Internet, and Video Game Junkie darylew AT hotmail DOT com