Boost logo

Boost Users :

Subject: Re: [Boost-users] [Boost.Intrusive] Intrusive doubly linked list does not compile on xlC11.1
From: Ioannis Papadopoulos (ipapadop_at_[hidden])
Date: 2011-11-18 20:11:44


On 11/18/2011 10:51 AM, Ion Gaztañaga wrote:
> El 18/11/2011 2:09, Ioannis Papadopoulos escribió:
>> On 11/15/2011 07:15 PM, Ioannis Papadopoulos wrote:
>>> Hi,
>>>
>>> I'm trying to compile the intrusive doubly linked list example from
>>> http://www.boost.org/doc/libs/1_47_0/doc/html/intrusive/list.html#intrusive.list.list_example
>>>
>>>
>>> using xlC11.1 on AIX/Power5+ and I am getting the following error:
>
> Is xlC standard conforming enough? I don't access to that compiler so I
> don't test it with that toolset.
>
> Ion

xlC 11.1 is quite good and till now I haven't encountered major issues.
I'm willing to go through the code and fix intrusive for xlC, provided
that I get some guidance.

For starters, the is_convertible is invoking undefined behavior. xlC
rightfully warns against passing a non-POD through ellipsis (only PODs
are allowed there, otherwise it is considered undefined behavior:

"/scratch/ipapado/usr/include/boost/intrusive/detail/mpl.hpp", line
70.45: 1540-2924 (W) Cannot pass an argument of non-POD class type
"boost::intrusive::detail::is_convertible<boost::intrusive::detail::member_hook_traits<MyClass,boost::intrusive::list_member_hook<boost::intrusive::none,boost::intrusive::none,boost::intrusive::none>,&MyClass::member_hook_>
*,boost::intrusive::detail::default_hook_tag *>::false_t" through ellipsis.

Changing it to

template <class T, class U>
class is_convertible
{
    typedef char true_t;
    /**/ struct /**/ false_t { char dummy[2]; };
    static true_t dispatch( /**/ U* /**/ );
    static false_t dispatch(...);
    public:
    static const bool value = sizeof(dispatch(static_cast<T*>(0))) ==
sizeof(true_t);
};

or using the one provided in type_traits, resolves the warnings. Still
trying to figure out why the error with the conversion exists though.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net