This mostly mirrors the restrictions in std::arch. It can be loosened slightly with later refactoring.