Зачем нужны два раза двоеточия без класа?
Указывает, что имя принадлежит глобальной области видимости.
Обычно это нужно, если есть глобальная функция и функция член класса с тем же именем, и вам нужно вызвать  именно глобальную.void foo() {
}

class bar
{
    bar()  {
        foo(); // будет вызван член класса foo
        ::foo(); // будет вызвана глобальная foo
    }
    void foo()  {
    }
};