I am trying to get the boost::container::map to work on OpenVMS (Alpha). I am getting an %CXX-E-BADBASECLS, (1) invalid base class error but have not been able to track it down. If I use std::map instead of boost::container::map in the code then it will work btw.
Thanks for any help,
SLDR
(Stephen L. De Rudder)
rdls22 AT tditx.com
More Info:
OpenVMS V8.2 on Alpha
$ cxx /ver
HP C++ V7.3-009 for OpenVMS Alpha V8.2
The compile command I am using is:
$ cxx/stand=strict_ansi/list/show=all/inc=userdisk4:[boost_1_49_0] t.cpp
I have enclosed the example code and the section of the listing output from the cxx compile.
#include <tree>
#include <stdio.h>
#include <stdlib.h>
#include <boost/container/string.hpp>
#include <boost/container/map.hpp>
#define cwstring std::string
class SecPrivOrderRec
{
public:
boost::container::map<long, bool> orderMap; //map order -> grant
};
class SecPrivOrderMap
{
public:
boost::container::map<long, SecPrivOrderRec> privMap; //map priv -> order/grant
};
class SecUserProfCompPrivMap
{
public:
SecUserProfCompPrivMap();
bool valid;
SecPrivOrderMap keyPrivMap; // map priv -> order
};
SecUserProfCompPrivMap::SecUserProfCompPrivMap()
{
this->valid = false;
}
class SecUserProfPrivMap
{
public:
SecUserProfPrivMap();
bool valid;
boost::container::map<long, long> compPrivMap; // map priv -> order
boost::container::map<cwstring, SecUserProfCompPrivMap> keyMap; // map comp -> key
};
SecUserProfPrivMap::SecUserProfPrivMap()
{
this->valid = false;
}
class SecUserProfMap
{
public:
boost::container::map<cwstring, SecUserProfPrivMap> compMap; // map comp -> priv
};
int
main(int argc, char **argv)
{
boost::container::map<std::string, int> j1;
j1["foobar"]=22;
boost::container::map<cwstring, SecUserProfMap> userProfileMap; //map profile -> comp -> key -> priv
long maxndx = 10000;
long maxndx2 = 1;
int testtype = 0;
char ndxstr[16];
cwstring s1 = "my_large_test_user";
cwstring s2 = "this_is_a_key";
cwstring s3;
//fprintf(stderr,"Running test type 0 -- expected to consume 10x memory\n");
for (long ndx = 0; ndx < maxndx; ndx++) {
//sprintf(ndxstr, "%d", ndx);
for (long ndx2 = 0; ndx2 < maxndx2; ndx2++) {
s3 = ndxstr;
userProfileMap[s1].compMap[s2].keyMap[s3].keyPrivMap.privMap[ndx2].orderMap[1] = true;
}
}
}
=========================================================================================================
Source Listing 2-MAR-2012 10:49:24 HP C++ V7.3-009 Page 1910
1-JAN-2012 13:14:12 has_member_function_callable_with.hpp;1
I6 92339 ␍
I6 92340 BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN␍
E namespace boost { namespace container { namespace container_detail {
I6 92341 ␍
I6 92342 template <typename Type>␍
I6 92343 class BOOST_PP_CAT(has_member_function_named_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)␍
E class has_member_function_named_select_on_container_copy_construction
I6 92344 {␍
I6 92345 struct BaseMixin␍
I6 92346 {␍
I6 92347 void BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME();␍
E void select_on_container_copy_construction();
I6 92348 };␍
I6 92349 ␍
I6 92350 struct Base : public Type, public BaseMixin { Base(); };␍
..............................1
%CXX-E-BADBASECLS, (1) invalid base class
detected during:
instantiation of class
"boost::container::container_detail::has_member_function_
named_select_on_container_copy_construction<Type>::Base
[with Type=const
boost::container::container_detail::node_alloc_holder<std
::allocator<std::pair<const std::string,
SecUserProfPrivMap>>,
boost::container::container_detail::intrusive_rbtree_type
<std::allocator<std::pair<const std::string,
SecUserProfPrivMap>>,
boost::container::container_detail::value_compare_impl<st
d::string, std::pair<const std::string,
SecUserProfPrivMap>, std::less<std::string>,
boost::container::container_detail::select1st<std::pair<c
onst std::string, SecUserProfPrivMap>>>>::type,
std::less<std::string>>::NodeAlloc]" at line 98 of
"USERDISK4:[DERUDDER.BOOST_1_49_0.BOOST.INTRUSIVE.DETAIL]
has_member_function_callable_with.hpp;1"