This header attempts to replicate some of the types from std::atomic.
If ETL_CPP11_SUPPORTED is defined as 1 in the profile then etl::atomic will be defined in terms of std::atomic.
Otherwise it will be implemented in terms of the built-in support, if available, from the compiler. For example, early GCC
and Arm compilers will use the __sync built-ins.
If there is an ETL atomic type available for your platform then ETL_HAS_ATOMIC will be set to 1, otherwise it will be set to 0.
NOTE: etl::atomic, apart from those based on std::atomic, only support integral and pointer types.