Q:

When were the 'and' and 'or' alternative tokens introduced in C++?

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?

A:

From the first ISO C++ standard C++98, this is described in 2.5/ Alternative tokens [lex.digraph]:

Alternative token representations are provided for some operators and punctuators.
In all respects of the language, each alternative token behaves the same, respectively, as its primary token, except for its spelling. The set of alternative tokens is defined in Table 2.

Table 2 - Alternative tokens
alternative primary | alternative primary | alternative primary
--------------------+---------------------+--------------------
   <%          {    |    and         &&   |    and_eq      &=
   %>          }    |    bitor       |    |    or_eq       |=
   <:          [    |    or          ||   |    xor_eq      ^=
   :>          ]    |    xor         ^    |    not         !
   %:          #    |    compl       ~    |    not_eq      !=
   %:%:        ##   |    bitand      &    |

So it's been around since the earliest days of the C++ standardisation process(a). The reason so few people are aware of it is likely because the main use case was for people operating in environments where the full character set wasn't necessarily available. For example (and this is stretching my memory), the baseline EBCDIC character set on the IBM mainframes did not have the square bracket characters [ and ].

(a) They were probably bought over from C99 which introduced these digraphs(b) (the first column above) to the language, and the alternative spellings (the other two columns) in the new iso646.h header file. Neither K&R nor C89 mention them at all.

(b) The standard names them di-graphs despite the fact some actually have three or four characters rather than two. The language purists among us would rightly expect these to be called trigraphs and quadgraphs. At least the C++ standards have an apologetic footnote about the incorrect use, something the C standard is still lacking :-)

A:

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.

A:

To actually answer the question :
They were defined in the first C++ standard. 

