Boost logo

Boost :

From: David B. Held (dheld_at_[hidden])
Date: 2004-01-05 04:10:36

"Dan W." <danw_at_[hidden]> wrote in message
> [...]
> class x
> {
> y deep_const *a;
> public:
> y* get_a(); //boom!
> y const * get_a() const; //boom!
> y deep_const * get_a() deep_const; //ok
> y const * get_get_a() const
> {
> get_a(); //boom!
> }
> y deep_const * get_get_a() deep_const
> {
> get_a(); //ok
> }
> };
> [...]

Ok, so how would this apply to our smart_ptr<> example? Maybe:

smart_ptr<T> deep_const p;

>From what I can tell, this would require us to define deep_const
accessors inside smart_ptr<> and/or do a deep_const_cast<>
of the raw pointer. But then, that doesn't seem to be any
different from implementing deep const manually. Are you
suggesting that the language *enforce* deep const, but not
actually *help* you implement it? At least const propagates
to aggregated members, so it is both enforcing a property and
helping you out at the language level. But from what I can see
above, you're just asking for enforcement, with a parallel
const concept. What I was thinking is that if you declare an
object deep_const, it will make all pointers inside that object
const/deep_const as well, without you ever having to declare
deep const versions of anything; just like declaring an object
const makes the members effectively const. So it's not y or
y* that we want to make deep_const. It's an instance of x.
What we really should be asking ourselves is how

x deep_const X;

is implemented/behaves.


Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
Version: 6.0.556 / Virus Database: 348 - Release Date: 12/26/2003

Boost list run by bdawes at, gregod at, cpdaniel at, john at