Почему is_lock_free функция-член?

В чем причина того, почему is_lock_free требует экземпляр (это функция-член)? Почему не метафункция типа или статическая функция члена constexpr?

Я ищу фактический пример того, почему это необходимо.

Ответы

Ответ 1

Стандарт позволяет иногда блокировать тип.

раздел 29.4 Свойство без блокировки

Макросы ATOMIC _..._ LOCK_FREE указывают свойство блокировки для соответствующие типы атомов, с подписанными и неподписанными вариантами сгруппированы вместе. Свойства также применимы к соответствующим (частичные) специализации атомного шаблона. Значение 0 указывает, что типы никогда не блокируются. Значение 1 указывает что типы иногда блокируются. Значение 2 указывает, что типы всегда блокируются.

атомная бумага С++ n2427 объясняет причину:

... В предложении чаще всего выполняются функции запроса без блокировки чем константы времени компиляции, поскольку последующие реализации платформа может обновлять операции блокировки с помощью операций блокировки, поэтому обычно для систем абстрагировать такие объекты за динамическими библиотеки, и мы хотим оставить эту возможность открытой. Более того, мы рекомендуем, чтобы реализации без использования атомной поддержки эта техника....

А также (как Джесси Хороший указал):

В предложении предусмотрены функции блокировки запросов для отдельных объектов, а не для целых типов, чтобы разрешить неизбежно смещенные атомные переменные без ущерба для производительности согласованных атомных переменных