Этот ответ относится к исходному вопросу. Впоследствии вопрос был изменен.
В принципе невозможно определить, используется ли глобальная переменная или необходима. Конструкторы могут иметь побочные эффекты, поэтому, даже если глобал никогда не доступен, он все равно может понадобиться.
Правдивая история. Программист, который останется безымянным, удалил «неиспользуемый» глобал из производственного приложения. К сожалению, конструктор для этой глобальной выделенной памяти из распределителя, который инициализируется при первом выделении.
В результате удаления неиспользуемого глобала следующий объект, созданный с использованием этого распределителя, вызвал инициализатор распределителя. К сожалению, инициализация не была поточно-ориентированной (и была четко задокументирована как таковая) - целью глобальной задачи было обеспечить ее инициализацию до создания каких-либо потоков.
Скажем так, были очень плохие последствия (с участием крупнейшего клиента этой компании - известного трехбуквенного правительственного агентства) и оставим все как есть.
Человек должен принять решение, что глобал не нужно создавать только потому, что он не используется, и это может быть чрезвычайно сложным решением.