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"