================
@@ -8340,8 +8340,17 @@ void Sema::checkInitializerLifetime(const
InitializedEntity &Entity,
<< Entity.getType()->isReferenceType() << CLE->getInitializer() <<
2
<< DiagRange;
} else {
- Diag(DiagLoc, diag::warn_ret_local_temp_addr_ref)
- << Entity.getType()->isReferenceType() << DiagRange;
+ // P2748R5: Disallow Binding a Returned Glvalue to a Temporary.
+ // [stmt.return]/p6: In a function whose return type is a reference,
+ // other than an invented function for std::is_convertible
([meta.rel]),
+ // a return statement that binds the returned reference to a temporary
+ // expression ([class.temporary]) is ill-formed.
+ if (getLangOpts().CPlusPlus26)
+ Diag(DiagLoc, diag::err_ret_local_temp_addr_ref)
+ << Entity.getType()->isReferenceType() << DiagRange;
----------------
t3nsor wrote:
It's not normatively ill-formed because of the difficulty of specifying exactly
which constructs of this nature are supposed to be ill-formed. In the pedantic
mode or whatever it's called, you'd have to accept it, even though it's bad.
https://github.com/llvm/llvm-project/pull/89942
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits