Boost logo

Boost :

Subject: Re: [boost] boost internal compile problems after moving to 1.44 in VC10
From: Christopher Lux (christopherlux_at_[hidden])
Date: 2010-08-18 09:51:15

2010/8/17 Ion Gaztañaga <igaztanaga_at_[hidden]>:

>> The errors especially are show stoppers here, i am not that into
>> rvalue references yet to see the problems with the templates in
>> boost.interprocess.
> Interprocess has not changed for this release, I had no time to update it
> for the release (SVN head is updated though). VC10 is not still supported
> (new move semantics are used by this compiler). You can try to disable
> native rvalue references for this compiler in
> boost/interprocess/detail/move.hpp
> A quick fix is to replace BOOST_HAS_RVALUE_REFS in this header with another
> non-existing macro.

i dug into the move and rvalue issues and found the following:

Everybody knows the following blog entry by Stephan T. Lavavej.

In this post he has an example for move semantics etc. with the
following move template:

template <typename T> typename RemoveReference<T>::type&& Move(T&& t) {
    return t;

NOW. I implemented an example very similar to his and got the same
error as in boost.interprocess:

1>e:\...\rvalue_ref_test\main.cpp(34): error C2440: 'return' : cannot
convert from 'rv_test' to 'rv_test &&'
1> You cannot bind an lvalue to an rvalue reference
1> e:\...\rvalue_ref_test\main.cpp(51) : see reference to
function template instantiation 'rv_test &&scm_move<rv_test&>(T)'
being compiled
1> with
1> [
1> T=rv_test &
1> ]

As i dug into the STL that comes with VC10 i found that they implement
the move template as follows:

template<class _Ty> inline typename
tr1::_Remove_reference<_Ty>::_Type&& move(_Ty&& _Arg)
    return ((typename tr1::_Remove_reference<_Ty>::_Type&&)_Arg);

NOW that works, and i am totally pissed off. Why do they publish blog
posts with the correct way to handle it while their compiler requires
a C-style cast in the move template function to get it working?

Steven, i know you read in here. Is there an explanation for this?

P.S. i attached my repo-example.


Boost list run by bdawes at, gregod at, cpdaniel at, john at