(C is my "native" language, so it doesn't really happen the other way around, but that's just me)
But honestly, I'm pretty sure we can call iso646.h "fringe" ;)
Certainly, speaking as someone brought up on imperative and later OO code, it took a fair bit of unlearning to understand functional programming, and I still have no clue about type theory.
> I have seen people coming to C++ from Python use "and", "or", and "not" in their if-statements :)
Technically, I believe this is actually UB, just like any other #define for a keyword or an identifier from the standard library.
When I do #include <stdbool.h> it also brings the #define bool _Bool, a keyword from the standard library.
How is it UB?
"Notwithstanding the provisions of 7.1.3, a program may undefine and perhaps then redefine the macros bool, true, and false"
I guess it's because defining these was so common even before C99. But there's no similar verbiage for <iso646.h>, so...