I've just read this nice piece from Reddit.
They mention and
and or
being "Alternative Tokens" to &&
and ||
I was really unaware of these until now. Of course, everybody knows about the di-graphs and tri-graphs, but and
and or
? Since when? Is this a recent addition to the standard?
I've just checked it with Visual C++ 2008 and it doesn't seem to recognize these as anything other than a syntax error. What's going on?
G++ has them, but I don't know about MS VC++.
You can get the same functionality by putting this at the top of your code file.
Though this is kinda hackish, it should work.
See the C++ standard. The committee draft #2 is freely available at ftp://ftp.research.att.com/dist/c++std/WP/CD2/body.pdf, although it's non-authoritative, out-of-date, and partially incorrect in a few places. Specifically, in section 2.5, Alternative Tokens, the following are defined:
Though honestly, I've never seen any of them ever used except for
and
,or
, andnot
, and even then, those are rare. Note that these are NOT allowable by default in plain C code, only in C++. If you want to use them in C, you'll have to either#define
them yourself as macros, or#include
the header<iso646.h>
, which defines all of the above except for<%
>%
<:
:>
%:
%:%:
as macros (see section 7.9 of the C99 standard).They are in the working paper for the new C++ standard, on page 14: C++ Standard
From the C++11 standard,
2.6/ Alternative tokens
:Table 2 - Alternative tokens
To actually answer the question :
They were defined in the first C++ standard.
MSVC supports them as keywords only if you use the
/Za
option to disable extensions; this is true from at least VC7.1 (VS2003).You can get them supported as macros by including
iso646.h
.My guess is they believe that making them keywords by default would break too much existing code (and I wouldn't be surprised if they are right).
This was discussed in a question a couple weeks ago somewhere here on SO, but I can't get SO's search or Google to find the damn thing.