Просто из любопытства: какова цель ведущего :: до boost::throw_exception(x)?
Ответ 1
Чтобы обратиться к корневому пространству имен. Это часто полезно, если в вашем классе или в вашем пространстве имен используется имя, которое также существует в корне, но в какой-то момент вы хотите обратиться к корневой версии.
Например, если я перегрузил new в свой класс, но хочу в какой-то момент ссылаться на значение по умолчанию (root) new, тогда я бы использовал ::new для ссылки на новый root.
Ответ 2
Чтобы указать, что это пространство имен верхнего уровня.
Он очень похож (но не идентичен) на то, как работает имя каталога. Без ведущей двойной двоеточия С++ сначала проверит, существует ли пространство имен этого имени в текущем "активном" пространстве имен. Если нет, тогда он будет проверять пространство имен имени на верхнем уровне.
С ведущей двойной двоеточием С++ пропустит первую проверку и только ищет пространство имен верхнего уровня.