-1

Why is the following not an error?

const auto& foo = std::string("foo");

In my mental model of C++ I think of references as glorified non-null pointers that the language wraps in syntactic sugar for me. However the code below would be an error but the above is not.

const auto* foo = &(std::string("foo"));

In the reference case why is the string not immediately destructed after the r-value expression is evaluated?

jwezorek
  • 8,592
  • 1
  • 29
  • 46

1 Answers1

1

Because this is the language rule Lifetime of a temporary

Whenever a reference is bound to a temporary or to a subobject thereof, the lifetime of the temporary is extended to match the lifetime of the reference.

There is no such rule for const pointers.

273K
  • 29,503
  • 10
  • 41
  • 64