mizvekov added a comment.

In D100713#2759637 <https://reviews.llvm.org/D100713#2759637>, @aaronpuchert 
wrote:

> Again, I'm not sure if it helps to use `getDecltypeForParenthesizedExpr` 
> where we don't actually have the `decltype` of a parenthesized expression.
>
> It's probably not entirely coincidental, but things aren't defined this way.

The current situation with `getDecltypeForParenthesizedExpr` is that it already 
is used in some places where there is no decltype of a parenthesized expression 
either.

This function is a bit new, I introduced it in D98160 
<https://reviews.llvm.org/D98160>. I think the mnemonic is OK, but this is the 
best I could come up at the time. If you have better suggestions, I am all for 
it.
In the above patch, this is introduced to help out with the type for the 
expression in a compound requires 
(http://eel.is/c++draft/expr.prim.req.compound#1.3.2).
But then it is also used in the implementation of decltype itself, where it 
kicks in even for non-parenthesized expressions (if the expression is not 
otherwise a special case, as defined in 
https://eel.is/c++draft/dcl.type.decltype#1).
I think the standard just missed giving a name to this pattern, and it 
otherwise IMHO misses the mark by using something more complex to explain 
something simpler.

I think it's no coincidence that for the patch I am working on, I had to change 
all of these copies in exactly the same way :)



================
Comment at: clang/lib/Sema/SemaExprCXX.cpp:5845
+  if (!To->isRValue()) {
+    QualType T = Self.Context.getDecltypeForParenthesizedExpr(To);
     InitializedEntity Entity = InitializedEntity::InitializeTemporary(T);
----------------
aaronpuchert wrote:
> mizvekov wrote:
> > aaronpuchert wrote:
> > > The quote doesn't reference parenthesized expressions, isn't this just 
> > > coincidentally the same thing?
> > It's fundamentally the same thing. The `getDecltypeForParenthesizedExpr` 
> > name is what I tried to keep, I don't have better ideas there.
> What this is doing is pointwise equal to `getDecltypeForParenthesizedExpr`, 
> but there is no parenthesized expression, and no `decltype`. There is a quote 
> from the standard that defines this separately (by now this seems to be 
> [[http://eel.is/c++draft/expr.cond#4|expr.cond#4]]), and there are some 
> differences especially in the prvalue case. So I'm not sure this helps.
Here for XValue and and LValue, the rules are exactly the same as 
https://eel.is/c++draft/dcl.type.decltype#1.
And the original code here even already special cases it...

I am sure there is some way we can agree that we should not repeat the code 
just because the standard did not bother to give a name to this part of the 
rules... And again I think it is no coincidence that it makes sense to perform 
the same changes in all these cases.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D100713/new/

https://reviews.llvm.org/D100713

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D100713: [clang] N... Matheus Izvekov via Phabricator via cfe-commits

Reply via email to