A pergunta Onde devo colocar funções que não estão relacionadas a uma classe provocou algum debate sobre se faz sentido em C ++ combinar funções utilitárias em uma classe ou apenas tê-las como funções livres em um espaço para nome.
Eu venho de um background em C # onde a última opção não existe e, portanto, naturalmente tendemos a usar classes estáticas no pequeno código C ++ que escrevo. A resposta mais votada para essa pergunta, bem como vários comentários, dizem que as funções livres devem ser preferidas, mesmo sugerindo que as classes estáticas eram um antipadrão. Por que isso acontece em C ++? Pelo menos na superfície, métodos estáticos em uma classe parecem indistinguíveis de funções livres em um espaço para nome. Por que, portanto, a preferência pelo último?
As coisas seriam diferentes se a coleção de funções utilitárias precisasse de alguns dados compartilhados, por exemplo, um cache que pudesse ser armazenado em um campo estático privado?