Boost logo

Boost :

Subject: [boost] [intrusive] boost/intrusive/detail/has_member_function_callable_with.hpp: inheriting from a const class
From: Krzysztof Czainski (1czajnik_at_[hidden])
Date: 2012-12-02 12:22:43


Hello,

I tried to use a boost::container::vector with a Texas Instruments
compiler, and I got an error pointing to line 88 of
<boost/intrusive/detail/has_member_function_callable_with.hpp> "Invalid
base class", with Type=const std::allocator<something>"

Here's the context:

      template <typename Type>
      class BOOST_PP_CAT(has_member_function_named_,
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
      {
         struct BaseMixin
         {
            void
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME();
         };

         struct Base : public Type, public BaseMixin { Base(); }; // <--
line 88

The problem seems to be the constness of Type. Here's a simplified example:

struct X {};

template < class T >
struct Y : T { Y() {} };

int main()
{
    Y<const X> y;
}

The above example compiles fine with Linux gcc version 4.5.4, and MinGW
4.5.0, but fails with my TI compiler.

My question is: is this a bug of the TI compiler, or is that compiler
actually right about this, and should we fix this in Boost? For now, my
workaround is:

struct Base : public ::boost::remove_cv<Type>::type, public BaseMixin {
Base(); }; // <-- line 88

Regards,
Kris


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk