::func() используется когда у тебя ещё где-то может быть func (скажем лямбда или метод класса), а надо использовать тот который объявлен в самом отдалённом скоупе
Чтобы к нему никто не имел доступ, кроме другого namespace, который ниже. Почему безымянный? Не знаю. Я пытался гуглить, но первая куча ссылок в Утке меня никуда не привел.
Нет, ответ "зачем нужно" я и так знаю. Почему-то только сейчас вбив другие ключевые слова на сайте майкрософта я увидел единственный (который я нашел) туториал по ним(namespace)и понял механику