On Fri, 20 Mar 2015, David Malcolm wrote:

> I believe that the presense of these markers in source code is almost
> always a bug (are there any GCC frontends in which the markers are
> parsable as something valid?)

Well, obviously they are valid inside #if 0, strings (where you have a 
test, though not one at start of line "\
<<<<<<<") and comments (where you don't have a test).  They are also valid 
when stringized:

#define str(s) #s
const char *s = str(
<<<<<<<
);

must be accepted.  They are also valid in the expansion of a macro that 
doesn't get expanded.

#define foo \
<<<<<<<

That is, in general, the invalidity only occurs when preprocessing tokens 
are converted to tokens.

In C++ (C++11 and later), >>>>>>> can also close a sequence of nested 
template argument lists, thanks to the rule about replacing >> by > > in 
that context.  And of course it's OK, if odd, to put that at the start of 
a line.  So in that case the preprocessing tokens do get converted to 
tokens, and that token sequence (interpreted as >> >> >> > and then 
contextually adjusted to > > > > > > >) is valid.

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to