J>и все будет правильно только если написать int A::b = ::b; J>Почему такая область видимости при инициализации?
потому, что имя b находится в области видимости класса А, и в твоем случае int A::b = b; в первую очередь будет рассматриваться именно область видимости класса А. А вот с ::b все уже нормально.
Of course, the code must be complete enough to compile and link.