-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
  • 6,542
  • 1
  • 26
  • 40

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
  • 19,191
  • 8
  • 34
  • 47