какую пользу можно извлечь из подобной конструкции: namespace{ int i }
Ответ Польза та же, что и при использовании ключевого слова static — избегание проблем с ODR (one definition rule). Если, к примеру, в заголовке у Вас будет int i , тогда при подключении в 2 и более .cpp файла Вы получите ошибку линковки — один и тот же символ определён дважды. Если же Вы напишете static int i , то i станет локальным для каждого объектного файла, в который i попадает — т.е. в каждом cpp будет свой i, в отличии от первого варианта, где i один на всю программу. То же самое происходит когда Вы пишите namespace{ int i } i получает внутреннее связывание и, следовательно, проблемы с ODR не будет.