My compiler does something I didn't expect. So I need to check what I understand. struct S { int x; }; S f() { return S(); } void g() { S& r1 = S(); // rvalue S& r2 = f(); // rvalue S& r3 = *(new S()); // lvalue delete &r3; } (1) Is the initializer expression S() an rvalue? (2) Is the initializer expression f() an rvalue? (3) Is the initializer expression *(new S()) an lvalue? (4) This compiles OK. But should r1 and r2 be const? Thank you, Marlene [ See http://www.**--****.com/ ] [ comp.lang.c++.moderated. First time posters: Do this! ]