Boost logo

Boost Users :

From: Brian Neal (bgneal_at_[hidden])
Date: 2007-03-15 17:45:05


On 3/15/07, Brian Neal <bgneal_at_[hidden]> wrote:
> On 3/15/07, Thorsten Ottosen <thorsten.ottosen_at_[hidden]> wrote:
> > Brian Neal wrote:
> > > Hi -
> > >
> > > We used the ptr_container library under gcc and Linux. We are now
> > > porting our software to the Integrity OS and the Green Hills Multi C++
> > > compiler. This compiler has the EDG front end. It cannot compile
> > > reversible_ptr_container.hpp.
> > >
> > > I had to change this:
> > >
> > > class reversible_ptr_container
> > > {
> > > private:
> > > BOOST_STATIC_CONSTANT( bool, allow_null = Config::allow_null );
> > >
> > > typedef BOOST_DEDUCED_TYPENAME Config::value_type Ty_;
> > >
> > > To this:
> > >
> > > class reversible_ptr_container
> > > {
> > > public:
> > > typedef BOOST_DEDUCED_TYPENAME Config::value_type Ty_;
> > > private:
> > > BOOST_STATIC_CONSTANT( bool, allow_null = Config::allow_null );
> > >
> > > The compiler complains that the typedef Ty_ is private, but it is used
> > > in the public part of the class where it should not be accessible.
> >
> > Huh?
> >
> > > I believe, but am not completely sure, that technically the compiler
> > > is correct. We have noticed that this EDG front end is very picky (in
> > > a good way).
> >
> > Private doesn't mean that the class's own functions can't use it.
> >
> > In what context does the compiler complain?
> >
>
> Sorry I should have included the error. Compiling any code that uses
> any ptr_container produces the following message (well actually there
> are a few more):
>
> "C:\boost\boost_1_33_1\boost/ptr_container/detail/reversible_ptr_container.hpp",
> line 86: error #265-D:
> type "boost::ptr_container_detail::reversible_ptr_container<Config,
> CloneAllocator>::Ty_ [with
> Config=boost::ptr_container_detail::sequence_config<int,
> std::deque<void *, std::allocator<void *>>>,
> CloneAllocator=boost::heap_clone_allocator]" is inaccessible
> static Ty_* allocate_clone_from_iterator( Iter i )
> ^

The problem is, I believe, that null_clone_allocater, as a nested
class of reversible_ptr_container, has no special visibility to see
the type Ty_, which is private in the outer class.

It is my understanding that this restriction will be lifted in a
future version of C++, but technically today it cannot see that
private type. EDG is very picky about that kind of stuff.

Regards,
BN


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net