Boost logo

Boost :

From: Fernando Cacciola (fcacciola_at_[hidden])
Date: 2001-09-03 15:44:44

----- Original Message -----
From: Daryle Walker <darylew_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Sunday, September 02, 2001 2:22 PM
Subject: [boost] Documenting non-copyable-ness (was: Re: Review:

> on 9/1/01 8:17 PM, Bill Kempf at williamkempf_at_[hidden] wrote:
> > --- In boost_at_y..., "Peter Dimov" <pdimov_at_m...> wrote:
> >> From: "William Kempf" <williamkempf_at_h...>
> >>> From: "Peter Dimov" <pdimov_at_m...>
> [SNIP]
> >>>> The reference for many classes indicates that they derive from
> >>>> boost::noncopyable. This implies, AFAICS, that a C-style cast to
> >>>> boost::noncopyable* works. If retained, all such derivations need an
> >>>> 'exposition-only' comment.
> >>>
> >>> They indicate private derivation, so the cast isn't valid. So I'm not
> >>> the comment is needed, but I'm happy to add it.
> >>
> >> The C-style cast is, unfortunately, valid, even when the base class is
> >> inaccessible. (5.4/7)
> >
> > Hmmm... ugly. Can't say as I understand the reasoning for this. In any
> > event, the whole point of boost::noncopyable is to be used in private
> > derivation in this manner, so I wouldn't expect much confusion with
things as
> > they are now. I will, however, add the comment.
> I haven't looked at the Threads library yet. If you want to say that a
> class is non-copyable in the documentation, then say that directly instead
> of saying that the class derives from boost::noncopyable. Use of
> boost::noncopyable is an implementation detail, and mentioning it may make
> some users try to take advantage of that inheritance.
> Also, just saying that a class inherits from boost::noncopyable assumes
> the user fully knows about Boost culture, at least about the
> boost::noncopyable class. New users would have no idea what that
> inheritance implies unless they look up boost::noncopyable.
I'll take this opportunity to ask this question:
Why isn't noncopyable a template class?

That is:

    template<class T>
    class noncopyable
    private: // emphasize the following members are private
        noncopyable( const noncopyable& );
        const noncopyable& operator=( const noncopyable& );
    }; // noncopyable

Used as:

struct Some : boost::noncopyable< Some>

just wonder...

Fernando Cacciola
Sierra s.r.l.

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