Одна ошибка VS2010? Разрешить привязку неконстантной ссылки к rvalue БЕЗ ДАЖЕ предупреждения?

string foo() { return "hello"; }
int main() 
{
    //below should be illegal for binding a non-const (lvalue) reference to a rvalue
    string& tem  = foo();   

    //below should be the correct one as only const reference can be bind to rvalue(most important const)
    const string& constTem = foo();   
}
  1. GCC может выдать ошибку компиляции : недопустимая инициализация неконстантной ссылки типа std :: string & из временный тип std :: string
  2. VS2008 не так уж и плох, поскольку, по крайней мере, он выдает предупреждение компиляции : предупреждение C4239: использовано нестандартное расширение: 'инициализация': преобразование из std :: string в std :: string & неконстантный ссылка может быть привязана только к lvalue
  3. Вот и проблема - VS2010 (SP1) отлично справляется БЕЗ каких-либо ошибка или предупреждение, ПОЧЕМУ ?? !! Я знаю, что ссылка rvalue в VS2010 может использоваться для связывания с rvalue, но я НЕ использую && , вместо этого в демонстрационном коде я просто использовал неконстантную ссылку lvalue!

Может кто-нибудь помочь мне объяснить здесь поведение VS2010? Это ошибка !? Спасибо

9
задан Matthieu M. 25 August 2011 в 11:45
поделиться