Boost logo

Boost-Build :

Subject: Re: [Boost-build] Boost and intel compiler
From: Bo Jensen (jensen.bo_at_[hidden])
Date: 2011-04-14 15:58:40


On Thu, Apr 14, 2011 at 7:00 PM, Bo Jensen <jensen.bo_at_[hidden]> wrote:
> On Wed, Apr 13, 2011 at 6:35 PM, Daniel James <dnljms_at_[hidden]> wrote:
>> On 13 April 2011 19:16, Bo Jensen <jensen.bo_at_[hidden]> wrote:
>>> On Wed, Apr 13, 2011 at 8:00 PM, Daniel James <dnljms_at_[hidden]> wrote:
>>>> On 11 April 2011 16:09, Bo Jensen <jensen.bo_at_[hidden]> wrote:
>>>>>
>>>>> Just to list one error I get on linux 32 with intel 11.1 and gcc 4.3 :
>>>>>
>>>>> intel-linux.compile.c++
>>>>> bin/intel-linux/release/address-model-32/link-static/threading-multi/model.o
>>>>> ../../../external/boost/boost/intrusive/intrusive_fwd.hpp(63): error:
>>>>> expected an identifier
>>>>>  template<class T, class ...Options>
>>>>>                          ^
>>>>
>>>> That's probably a problem in the library, rather than the build
>>>> system. It should probably use Boost.Config rather than it's own
>>>> configuration logic.
>>>
>>> Thanks for the reply. I guess it's out of my knowledge area, so you
>>> say the intrusive library should use Boost.Config, which would solve
>>> the problem right ? So I guess I get nothing out of going the long
>>> support road at intel then..
>>>
>>> I just see many of these errors in different libraries. I saw some
>>> advice on intel support forums, where similar problems were solved by
>>> setting some gcc compiler defines, so I assumed intel were configured
>>> incorrectly.
>>
>> Well, the problem is that this header thinks you have support for
>> variadic templates, when you don't:
>>
>> http://www.boost.org/doc/libs/1_46_1/boost/intrusive/detail/workaround.hpp
>
> That's excellent ! I commented out the setting in this file and it
> worked with g++-4.3 on my 32 bit linux machine. Sadly it did not
> compile on linux 64 bit with the same compiler version, I get bunch of
> :
>
> ...failed intel-linux.compile.c++
> bin/intel-linux/release/address-model-64/link-static/threading-multi/mpshelper.o...
> intel-linux.compile.c++
> bin/intel-linux/release/address-model-64/link-static/threading-multi/write.o
> /usr/include/c++/4.3/type_traits(82): error: expected a ">"
>      struct is_rvalue_reference<_Tp&&>
>                                    ^
>
> /usr/include/c++/4.3/type_traits(106): error: expected a ">"
>      struct remove_reference<_Tp&&>
>                                 ^
>
> /usr/include/c++/4.3/type_traits(136): catastrophic error: rvalue
> references not yet implemented
>      { typedef _Tp&&   type; };
>                   ^
>
> compilation aborted for ../write/write.cpp (code 4)
>
> So it is another mistake in supported c++x0 features.
>
> I can not find the actual included header which causes this, since I
> got many includes, is there an easy way to make the compiler write out
> when it enters a header file ? Or how should I debug this ?
>
>>
>> If you can change the gcc defines so that it doesn't that might fix
>> it. But the best thing to do is write a ticket for intrusive to get
>> this fixed properly.
>
> Sure, I will submit a ticket, when I understand what's going on.
>
> Thanks for the help !
>
>>
>>> On windows it does not compile at all with intel 11.1, which is a
>>> surprise to me.
>>
>> I don't think we have any tests running on the windows version.
>> _______________________________________________
>> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build
>>
>

And it gets even weirder, I can build without problems if I add
-diag-error to the compiler flags in my user-config.jam. To the best
of my knowledge it should have no such effect, I merely tried to find
a way to get the compiler write out the header files it worked on and
by accident found it worked...

Can this be some effect on which order the header files a processed ?


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk