On 3/15/07, Thorsten Ottosen 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::Ty_ [with
Config=boost::ptr_container_detail::sequence_config>>,
CloneAllocator=boost::heap_clone_allocator]" is inaccessible
static Ty_* allocate_clone_from_iterator( Iter i )
^
detected during:
instantiation of class
"boost::ptr_container_detail::reversible_ptr_container::null_clone_allocator
[with
Config=boost::ptr_container_detail::sequence_config>>,
CloneAllocator=boost::heap_clone_allocator,
allow_null_values=false]" at line 283
instantiation of "void
boost::ptr_container_detail::reversible_ptr_container::null_policy_deallocate_clone(const
boost::ptr_container_detail::reversible_ptr_container::Ty_ *) [with
Config=boost::ptr_container_detail::sequence_config>>,
CloneAllocator=boost::heap_clone_allocator]" at line 233
instantiation of "void
boost::ptr_container_detail::reversible_ptr_container::remove(I) [with
Config=boost::ptr_container_detail::sequence_config>>,
CloneAllocator=boost::heap_clone_allocator,
I=boost::void_ptr_iterator>::iterator,
boost::ptr_container_detail::sequence_config>>::U>]" at
line 240
instantiation of "void
boost::ptr_container_detail::reversible_ptr_container::remove(I, I) [with
Config=boost::ptr_container_detail::sequence_config>>,
CloneAllocator=boost::heap_clone_allocator,
I=boost::void_ptr_iterator>::iterator,
boost::ptr_container_detail::sequence_config>>::U>]" at
line 213
instantiation of "void
boost::ptr_container_detail::reversible_ptr_container::remove_all() [with
Config=boost::ptr_container_detail::sequence_config>>,
CloneAllocator=boost::heap_clone_allocator]" at line 364
instantiation of
"boost::ptr_container_detail::reversible_ptr_container::~reversible_ptr_container() [with
Config=boost::ptr_container_detail::sequence_config>>,
CloneAllocator=boost::heap_clone_allocator]" at line 162
of
"C:\boost\boost_1_33_1\boost/ptr_container/ptr_sequence_a
dapter.hpp"
instantiation of "boost::ptr_sequence_adapter::ptr_sequence_adapter(const
boost::ptr_sequence_adapter::allocator_type &) [with T=int,
VoidPtrSeq=std::deque>,
CloneAllocator=boost::heap_clone_allocator]" at line 45
of
"C:\boost\boost_1_33_1\boost/ptr_container/ptr_deque.hpp"
instantiation of "boost::ptr_deque::ptr_deque(const boost::ptr_deque::allocator_type &) [with
T=int, CloneAllocator=boost::heap_clone_allocator,
Allocator=std::allocator]" at line 42 of
"Common\Ttnt\JtrsKeyTag.cpp"
Regards,
BN