Когда я хочу использовать пространство имен?
Вы должны использовать пространство имен всякий раз, когда это помогает лучше организовать ваш код. Вы можете группировать связанные классы, функции, константы и типы вместе в одном пространстве имен.
Когда я должен использовать функции / процедуры внутри пространства имен (не внутри класса)?
Всякий раз, когда функция не должна быть функцией-членом. А именно, если функции не требуется доступ к каким-либо переменным-членам какого-либо экземпляра класса, она должна быть реализована как функция, не являющаяся членом.
Статьи Херба Саттера Герба недели Что в классе? - Принципы интерфейса и Пространства имен и Принцип интерфейса обсуждают использование функций, не являющихся членами, и пространства имен в интерфейсе.