Kiedy należy rozpocząć RVO?

Z następującego kodu: Jeśli zdarzyło się RVO, spodziewam się zobaczyć 2 adresy wskazujące na tę samą lokalizację, jednak tak nie jest (mój kompilator to MS VC9.0)

#include <iostream>
#include <string>

std::string foo(std::string& s)
{
   std::cout << "address: " << (unsigned int)(&s) << std::endl;
   return s;
}

int main()
{
   std::string base = "abc";
   const std::string& s = foo(base);
   std::cout << "address: " << (unsigned int)(&s) << std::endl;
   std::cout << s << std::endl;
   return 0;
}

W jakich warunkach powinno się dziać RVO?

btw, moje pytanie opieram na następującej dyskusji:http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/

questionAnswers(4)

yourAnswerToTheQuestion