2013/12/4 Arne Vogel <avogel@benocs.com>
On 03.12.2013 00:01, Krzysztof Czainski wrote:
[...] what do you gain by doing:
  const auto& vec = boost::any_cast<std::vector<int>>(makeVec());
instead of
  const auto vec = boost::any_cast<std::vector<int>>(makeVec());
?

Regards,
Kris

In C++11 with a moveable type, probably not much. I don't quite remember why I wrote the code like this - it could have been out of habit since in C++98 using a reference may save a copy, though I guess an optimizing compiler had already been allowed to elide it.

I'm just curious to know if anyone uses a compiler that doesn't actually elide the copy (or move) in this case ;-) In all discussions about this I've never seen someone actually name one, but still they try to avoid the copy just in case.

I think taking values returned by value by const & to extend their lifetime should be deprecated in new C++ - compilers could then warn not to do it.

Cheers,
Kris