Мне интересно узнать, использовал ли кто-нибудь это когда-либо,
Да, но, как вы можете видеть из многих примеров в этих вопросах и ответах, __LINE__
, который стандартизирован, также будет достаточным в большинстве случаев.
__COUNTER__
действительно необходимо только в тех случаях, когда число должно увеличиваться на единицу каждый раз или оно должно иметь непрерывность по нескольким #include
файлам.
а стоит ли это что-то стандартизировать?
__COUNTER__
, в отличие от __LINE__
, очень опасен, поскольку зависит от того, какие заголовочные файлы включены и в каком порядке. Если два .cpp
файла (единицы перевода) включают файл заголовка, который использует __COUNTER__
, но файл заголовка получает разные последовательности подсчета в разных экземплярах, они могут использовать разные определения одного и того же и нарушать правило одного определения.
Нарушения правил с одним определением очень трудно уловить, что может привести к ошибкам и угрозам безопасности. Несколько вариантов использования __COUNTER__
на самом деле не перевешивают недостатки и отсутствие масштабируемости.
Даже если вы никогда не отправляете код, который использует __COUNTER__
, это может быть полезно при создании прототипа последовательности перечисления, избавляя вас от необходимости присваивать имена до того, как членство станет конкретным.