Visual C++ has a “Microsoft extension” that allows it to take a non-const reference to a temporary (and boost serialization uses non-const references whether you are serializing in or out).

 

If you compile with Microsoft extensions enabled: /Ze the following code will compile.

If you compile without Microsoft extensions enabled: /Za the following code will not compile.

 

struct obj_t{};

 

void foo( obj_t & );

obj_t bar();

 

void main()

{

    foo( bar() );

}

 

 

 

From: Boost-users [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Paul Blampspied
Sent: Saturday, August 02, 2014 4:13 PM
To: boost-users
Subject: Re: [Boost-users] [serialization] Please help me solve this compile error.

 

Thanks very much.  That is exactly what the problem was.  It used to work at one time though.  I think the C++ standard may have changed - or maybe it was in Visual C++ before I switched to a Linux environment. 

 

many thanks.

 

On Wed, Jul 30, 2014 at 2:48 PM, Bjorn Reese <breese@mail1.stofanet.dk> wrote:

On 07/30/2014 04:01 AM, Paul Blampspied wrote:

     boost::archive::binary_oarchive  oa(file);
     oa  <<  PersistentManagedArray<int>(size,  capacity,  ints);  //This  line  does  not  compile  !

 

The stream operator in Boost.Serialization does not take temporary
objects, so create the PersistentManagedArray<T> object on a separate
line, and then pass it to the stream.

_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users