Tengo algo de código que se parece a:¿Cuándo "y" convertirse en un operador en C++
static const std::string and(" AND ");
Esto provoca un error en g ++, así:
Row.cpp:140: error: expected unqualified-id before '&&' token
así que después de maldecir el tonto que definido "y" como & &, añadí
#ifdef and
#undef and
#endif
y ahora tengo
Row.cpp:9:8: error: "and" cannot be used as a macro name as it is an operator in C++
¿Qué lleva a mi pregunta de CUÁNDO "y" se convirtió en operador en C++? No puedo encontrar nada que indique que es así, excepto, por supuesto, este mensaje de g ++
Se introdujo por primera vez en C94, creo. Ver http://www.lysator.liu.se/c/na1.html. Si bien son macros en C, son operadores preprocesadores en C++, por lo que no puede '# definirlos. (No son palabras clave, técnicamente. Pero tampoco todas las palabras clave están reservadas de esa manera. Una que es, es 'new'. Una que no es, por ejemplo, es' sizeof'. Así que puedes '#define sizeof') –
Para eso, observe este informe de problema: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#369. Actualmente, un '# define' de' delete' o 'new' no está permitido. –
Al igual que un FYI para los usuarios de MSVC, si desea que funcionen en MSVC, debe habilitar la opción '/ Za' para poner el compilador en modo ANSI estricto o debe incluir' iso646.h' (o 'ciso646') –