Стандарт перечисляет ключевые слова в 2.11. Есть также список альтернативных представлений, отдельный от списка ключевых слов, который зарезервирован и не может использоваться иначе, но не является ключевыми словами. and
и or
находятся в этом списке. Раздел 17.4.3 описывает ограничения для программ, которые используют библиотеки, а 17.4.3.1.3 описывает, что имена, объявленные с внешней связью в заголовке, зарезервированы как в std::
, так и в глобальном пространстве имен.
Другими словами, вам не нужно переходить на C ++ 0x, чтобы иметь такие проблемы. and
и or
уже зарезервированы, а заголовок <functional>
содержит plus
в качестве шаблонного типа структуры, и поэтому plus
запрещен, если <functional>
прямо или косвенно #include
d.
Я не уверен, что вывод такого большого количества материала в глобальное пространство имен был действительно мудрым, но это то, что говорит стандарт.