> Not being able to do byte-granular writes means you simply can't implement things like this at all unless you:
> 1) Decide that "char" will be 32 bits (i.e., make a byte on your system 4x larger than usual).
With the C++ memory model you can make std::atomic<char> larger than char. A lot of code assumes that this is not the case and that it is possible to cast between the two, but it's (surprise) undefined behavior.