* bug#24195: 25.0.95; Wrong indentation after a 'less < than' comparison (c++-mode)
@ 2016-08-10 9:38 Arash
2016-08-10 22:07 ` Robert Cochran
2016-08-11 12:14 ` Alan Mackenzie
0 siblings, 2 replies; 8+ messages in thread
From: Arash @ 2016-08-10 9:38 UTC (permalink / raw)
To: 24195
$ emacs -Q test.cc
bool test()
{
return \
a() <= b() &&
c() >= d() &&
e() == f() &&
g() != h() &&
i() > j() &&
k() < l() &&
m() == n() // !!!
;
}
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#24195: 25.0.95; Wrong indentation after a 'less < than' comparison (c++-mode)
2016-08-10 9:38 bug#24195: 25.0.95; Wrong indentation after a 'less < than' comparison (c++-mode) Arash
@ 2016-08-10 22:07 ` Robert Cochran
2016-08-11 12:14 ` Alan Mackenzie
1 sibling, 0 replies; 8+ messages in thread
From: Robert Cochran @ 2016-08-10 22:07 UTC (permalink / raw)
To: Arash; +Cc: 24195
I can comfirm; error is still present on emacs-25 branch @ commit f785ff4
--
~Robert Cochran
GPG Fingerprint - E778 2DD4 FEA6 6A68 6F26 AD2D E5C3 EB36 4886 8871
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#24195: 25.0.95; Wrong indentation after a 'less < than' comparison (c++-mode)
2016-08-10 9:38 bug#24195: 25.0.95; Wrong indentation after a 'less < than' comparison (c++-mode) Arash
2016-08-10 22:07 ` Robert Cochran
@ 2016-08-11 12:14 ` Alan Mackenzie
2016-08-12 15:26 ` Noam Postavsky
1 sibling, 1 reply; 8+ messages in thread
From: Alan Mackenzie @ 2016-08-11 12:14 UTC (permalink / raw)
To: Arash; +Cc: 24195
Hello, Arash.
On Wed, Aug 10, 2016 at 02:08:52PM +0430, Arash wrote:
> $ emacs -Q test.cc
> bool test()
> {
> return \
> a() <= b() &&
> c() >= d() &&
> e() == f() &&
> g() != h() &&
> i() > j() &&
> k() < l() &&
^
> m() == n() // !!!
> ;
> }
Yes. In the line "k() < l() &&", the "<" is being recognised as a
template opener.
The syntax of C++ is ambiguous, and it is difficult for anything which
isn't a compiler reliably to distinguish between "less than" and "open
template" in circumstances like that. It was easier for earlier
versions of C++, where the "&&" operator wasn't valid inside a template.
I'm not sure I can do very much to help, here. Even waiting on the
closing ">" before recognising a template wouldn't help much, because
you're just as likely to have the line with "<" before the line with
">".
There are crude workarounds, like writing "!(k() >= l()), but that's
horrible.
So, sorry and all that, I don't think I can do anything to fix this.
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#24195: 25.0.95; Wrong indentation after a 'less < than' comparison (c++-mode)
2016-08-11 12:14 ` Alan Mackenzie
@ 2016-08-12 15:26 ` Noam Postavsky
2016-08-12 16:56 ` Andreas Schwab
0 siblings, 1 reply; 8+ messages in thread
From: Noam Postavsky @ 2016-08-12 15:26 UTC (permalink / raw)
To: Alan Mackenzie; +Cc: Arash, 24195
On Thu, Aug 11, 2016 at 8:14 AM, Alan Mackenzie <acm@muc.de> wrote:
> Yes. In the line "k() < l() &&", the "<" is being recognised as a
> template opener.
Is it possible to say that "<" can't be a template opener when it
comes after a close paren? (I can't think of a case in C++ where that
would fail, though I'm not 100% certain there isn't one)
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#24195: 25.0.95; Wrong indentation after a 'less < than' comparison (c++-mode)
2016-08-12 15:26 ` Noam Postavsky
@ 2016-08-12 16:56 ` Andreas Schwab
2016-08-18 12:11 ` npostavs
0 siblings, 1 reply; 8+ messages in thread
From: Andreas Schwab @ 2016-08-12 16:56 UTC (permalink / raw)
To: Noam Postavsky; +Cc: Alan Mackenzie, Arash, 24195
On Aug 12 2016, Noam Postavsky <npostavs@users.sourceforge.net> wrote:
> On Thu, Aug 11, 2016 at 8:14 AM, Alan Mackenzie <acm@muc.de> wrote:
>> Yes. In the line "k() < l() &&", the "<" is being recognised as a
>> template opener.
>
> Is it possible to say that "<" can't be a template opener when it
> comes after a close paren? (I can't think of a case in C++ where that
> would fail, though I'm not 100% certain there isn't one)
operator()<foo>
Andreas.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#24195: 25.0.95; Wrong indentation after a 'less < than' comparison (c++-mode)
2016-08-12 16:56 ` Andreas Schwab
@ 2016-08-18 12:11 ` npostavs
2016-08-22 11:08 ` Alan Mackenzie
0 siblings, 1 reply; 8+ messages in thread
From: npostavs @ 2016-08-18 12:11 UTC (permalink / raw)
To: Andreas Schwab; +Cc: Alan Mackenzie, Arash, 24195
Andreas Schwab <schwab@linux-m68k.org> writes:
> On Aug 12 2016, Noam Postavsky <npostavs@users.sourceforge.net> wrote:
>
>> On Thu, Aug 11, 2016 at 8:14 AM, Alan Mackenzie <acm@muc.de> wrote:
>>> Yes. In the line "k() < l() &&", the "<" is being recognised as a
>>> template opener.
>>
>> Is it possible to say that "<" can't be a template opener when it
>> comes after a close paren? (I can't think of a case in C++ where that
>> would fail, though I'm not 100% certain there isn't one)
>
> operator()<foo>
So could we say "<" can't be a template opener when it comes after a
close paren except for the close paren of "operator()"?
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#24195: 25.0.95; Wrong indentation after a 'less < than' comparison (c++-mode)
2016-08-18 12:11 ` npostavs
@ 2016-08-22 11:08 ` Alan Mackenzie
2016-08-25 1:24 ` npostavs
0 siblings, 1 reply; 8+ messages in thread
From: Alan Mackenzie @ 2016-08-22 11:08 UTC (permalink / raw)
To: npostavs; +Cc: Arash, Andreas Schwab, 24195
Hello, Noam.
On Thu, Aug 18, 2016 at 08:11:26AM -0400, npostavs@users.sourceforge.net wrote:
> Andreas Schwab <schwab@linux-m68k.org> writes:
> > On Aug 12 2016, Noam Postavsky <npostavs@users.sourceforge.net> wrote:
> >> On Thu, Aug 11, 2016 at 8:14 AM, Alan Mackenzie <acm@muc.de> wrote:
> >>> Yes. In the line "k() < l() &&", the "<" is being recognised as a
> >>> template opener.
> >> Is it possible to say that "<" can't be a template opener when it
> >> comes after a close paren? (I can't think of a case in C++ where that
> >> would fail, though I'm not 100% certain there isn't one)
> > operator()<foo>
> So could we say "<" can't be a template opener when it comes after a
> close paren except for the close paren of "operator()"?
We could, but I can't see it helping very much (though it might help a
little bit).
There are probably quite a lot of special cases like that where it is
possible to say for sure that the "<" does/doesn't introduce a template
construct. But that will leave a lot of ambiguous cases. The more we
try to analyse these, the closer we get to building a compiler inside CC
Mode. For example, the example given might have been "k < l() && ....",
leaving no syntactic clues about the templateicity of "<".
Analysing the C++ syntax to determine these determinable cases would be
a lot of work, and it would be a lot of work to implement it, too.
The C++ standards people haven't thought it worthwhile to preserve
unambigious syntax in their language, so there is no way CC Mode can get
it right every time.
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#24195: 25.0.95; Wrong indentation after a 'less < than' comparison (c++-mode)
2016-08-22 11:08 ` Alan Mackenzie
@ 2016-08-25 1:24 ` npostavs
0 siblings, 0 replies; 8+ messages in thread
From: npostavs @ 2016-08-25 1:24 UTC (permalink / raw)
To: Alan Mackenzie; +Cc: Arash, Andreas Schwab, 24195
tags 24195 wontfix
quit
Alan Mackenzie <acm@muc.de> writes:
>> So could we say "<" can't be a template opener when it comes after a
>> close paren except for the close paren of "operator()"?
>
> We could, but I can't see it helping very much (though it might help a
> little bit).
>
> There are probably quite a lot of special cases like that where it is
> possible to say for sure that the "<" does/doesn't introduce a template
> construct. But that will leave a lot of ambiguous cases. The more we
> try to analyse these, the closer we get to building a compiler inside CC
> Mode. For example, the example given might have been "k < l() && ....",
> leaving no syntactic clues about the templateicity of "<".
>
> Analysing the C++ syntax to determine these determinable cases would be
> a lot of work, and it would be a lot of work to implement it, too.
>
> The C++ standards people haven't thought it worthwhile to preserve
> unambigious syntax in their language, so there is no way CC Mode can get
> it right every time.
Makes sense, I've been out of C++ for some time, so I kind of forgot how
ridiculous the syntax is. Marking as wontfix.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2016-08-25 1:24 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-10 9:38 bug#24195: 25.0.95; Wrong indentation after a 'less < than' comparison (c++-mode) Arash
2016-08-10 22:07 ` Robert Cochran
2016-08-11 12:14 ` Alan Mackenzie
2016-08-12 15:26 ` Noam Postavsky
2016-08-12 16:56 ` Andreas Schwab
2016-08-18 12:11 ` npostavs
2016-08-22 11:08 ` Alan Mackenzie
2016-08-25 1:24 ` npostavs
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).