Boost logo

Boost :

Subject: Re: [boost] [serialization] Passing literals to oarchive
From: Robert Ramey (ramey_at_[hidden])
Date: 2015-03-27 00:40:12

Bjorn Reese wrote
> Currently we cannot pass literals directly to an oarchive like this:
> oarchive << 42;
> since compilation fails in interface_oarchive.hpp, as the operator<<
> only takes parameters by reference.

Actually, all parameters are already const reference. I realize that it
doesn't look that way. That's because interface_oarchive::operator<<(T & t)
is never called from the application but rather from lower level. By
the time interface_oarchive::operator<<(T & t) gets called, the T already
has the "const" as part of the type. (Actually it has a & also so the
 interface_oarchive::operator<<(T) would actually be the same. I
realize this is confusing, but that's the way C++ works.

> We can remedy this by changing operator<< to take the parameter
> by const-ref instead, as show below. Is there any reason not to do
> this?

so there's nothing to remedy

FWIW - there is a case to be made for replacing at the top level
text_oarchive::operator<<(const T & t) with
text_oarchive::operator<<(T && t) but that's another discussion.

Robert Ramey

View this message in context:
Sent from the Boost - Dev mailing list archive at

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