Boost logo

Boost :

Subject: Re: [boost] [intrusive][container] boost/intrusive/detail/has_member_function_callable_with.hpp: inheriting from a const class
From: Krzysztof Czainski (1czajnik_at_[hidden])
Date: 2012-12-13 12:26:48


2012/12/2 Krzysztof Czainski <1czajnik_at_[hidden]>

> 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
>

Hi,

Since there is no response, and this is used by Boost.Container, I added
the [container] tag to the subject.

Any opinions about which compiler is right about this: is GCC too
permissive, or is TI buggy in this respect?

Regards,
Kris


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