Subject: Re: bug#72695: CC Mode 5.35.2 (C++//l); c++-mode misindents 'if constexpr' inside lambdas

From: Arsen Arsenović <[email-masked]>
Date: Sat, 28 Sep 2024 01:24:52 +0200

Hi Alan,

Alan Mackenzie <[email-masked]> writes:

> So, can I close bug#72695 now?

Ah, excuse me.  Yes, I do believe so.

>> I'm not sure this is a bug but it is something I noticed by accident:
>
>>       (std::visit
>>        ([] <typename T>
>>        	(const T& data)
>> 	{
>>         }));
>
>> ... the { is not an inline-open, but an arglist-cont-nonempty (though,
>> to be clear, the body is indented okay; I've elided it from the example
>> above for that reason).
>
> That is a bug, yes, but a different bug.  Could I ask you to raise a new
> Emacs bug report for it, please?

I can do so tomorrow - getting drowsy at this point.

> I think it will require some effort to solve, since it involves "function
> type" constructs inside parentheses, which I think was something new to
> CC Mode with C++20 (but I'm not sure).  Rather than just relying on the
> context of the outer (, c-guess-basic-syntax will have to examine the
> contents of (...) to get better analysis.

Hmm, I think this was here in 11 also (and perhaps before, due to the
GNU statement expression extension).

>> Same goes for the (const T& data), which doesn't get indented the same
>> as a 'standalone' lambda, but it does indent the same as one saved into
>> a variable:
>
>>   []
>>     ()
>>   {
>>   };
>>   auto x =
>>     []
>>     ()
>>     {
>>     };
>>   auto x =
>>     ([]
>>      ()
>>     {
>>     });
>
>> I do not know whether this is correct.
>
> Neither do I, this late at night.  ;-)  I'll have a look at all these
> examples tomorrow.

:-)

Thanks.

I will file a bug with these tomorrow.

Have a lovely evening!
-- 
Arsen Arsenović