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