В чем причина того, почему is_lock_free требует экземпляр (это функция-член)? Почему не метафункция типа или статическая функция члена constexpr?
Я ищу фактический пример того, почему это необходимо.
Ответ 1
Стандарт позволяет иногда блокировать тип.
раздел 29.4 Свойство без блокировки
Макросы ATOMIC _..._ LOCK_FREE указывают свойство блокировки для соответствующие типы атомов, с подписанными и неподписанными вариантами сгруппированы вместе. Свойства также применимы к соответствующим (частичные) специализации атомного шаблона. Значение 0 указывает, что типы никогда не блокируются. Значение 1 указывает что типы иногда блокируются. Значение 2 указывает, что типы всегда блокируются.
... В предложении чаще всего выполняются функции запроса без блокировки чем константы времени компиляции, поскольку последующие реализации платформа может обновлять операции блокировки с помощью операций блокировки, поэтому обычно для систем абстрагировать такие объекты за динамическими библиотеки, и мы хотим оставить эту возможность открытой. Более того, мы рекомендуем, чтобы реализации без использования атомной поддержки эта техника....
В предложении предусмотрены функции блокировки запросов для отдельных объектов, а не для целых типов, чтобы разрешить неизбежно смещенные атомные переменные без ущерба для производительности согласованных атомных переменных