Почему не std:: atomic_is_lock_free статический constexpr?

Я смущен. Как возможно, что реализация может знать, является ли тип атомом только во время выполнения?

Ответ 1

Компилятор может не знать, на каком процессоре будет работать код, а процессоры могут отличаться своими функциями блокировки. Например, ЦП может не поддерживать атомные операции в типах long (и поэтому может потребоваться блокировка), но если система имеет только одно ядро, они могут быть атомарными автоматически, потому что их невозможно прервать, и нет другое ядро ​​для гонки (и поэтому ничего особенного не требуется и тип блокируется).