https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88996
--- Comment #5 from emsr at gcc dot gnu.org --- I was a bit surprised I "needed" these. There are apparently some uses of these. I'll roll back and show you... /home/ed/obj/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/atomic_base.h:104:7: error: no match for ‘operator|’ (operand types are ‘std::memory_order’ and ‘std::memory_order’) 103 | return memory_order(__cmpexch_failure_order2(__m & __memory_order_mask) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | std::memory_order 104 | | (__m & __memory_order_modifier_mask)); | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | std::memory_order Ok, I'm casting: | __memory_order_modifier(__m & __memory_order_modifier_mask)); This will work without the operators. Those are sequatial flags. Killed the ops, fix some more sadness and retest.