Boost logo

Boost-Build :

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


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
>


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