Я смущен. Как возможно, что реализация может знать, является ли тип атомом только во время выполнения?
Почему не std:: atomic_is_lock_free статический constexpr?
Ответ 1
Компилятор может не знать, на каком процессоре будет работать код, а процессоры могут отличаться своими функциями блокировки. Например, ЦП может не поддерживать атомные операции в типах long
(и поэтому может потребоваться блокировка), но если система имеет только одно ядро, они могут быть атомарными автоматически, потому что их невозможно прервать, и нет другое ядро для гонки (и поэтому ничего особенного не требуется и тип блокируется).