Могут ли временные объекты привязываться к неконстантным ссылкам?

Я написал следующий код, чтобы проверить это:

struct X
{
   char* x;
   X()
   {
      x = new char('a');
   }
   ~X()
   {
      *x = 'b';
      delete x;
   }
};

void foo(const X& x)
{
}
void goo(X& x)
{
}

int main()
{
   foo(X());
   goo(X());
}

Деструкторы для временных объектов вызываются после выхода из обеих функций, но я думал, что вы можете привязать временный объект только к ссылка const. Почему тогда gooработает?

UB и MSVS неверны или все в порядке?

5
задан AMCoder 16 May 2012 в 08:55
поделиться