The std::atomic_signed_lock_free and std::atomic_unsigned_lock_free
typedefs are a C++20 feature and should be guarded with an #if, so
that they don't get defined in C++17 and prior versions.
Also with the current implementation inclusion of the <atomic> header
will fail the compilation for targets that don't have lock-free atomic
integers (e.g. Armv6-M) because libcpp_signed_lock_free and
libcpp_unsigned_lock_free will not get defined. We should not try to
define std::atomic_signed_lock_free and std::atomic_unsigned_lock_free
in this case as well (according to [atomics.alias]/2 these typedefs
are optional in freestanding implementations).
This should check that the configuration is indeed freestanding, and bail out if it's hosted.