Li que para fazer o contêiner personalizado funcionar com o loop for baseado em intervalo, "coisas" precisam estar no mesmo namespace. Quais coisas precisam estar no mesmo namespace? As funções livres begin-end e o iterador que ele retorna? Ou as funções begin-end e o contêiner passado a elas?
begin
eend
precisam estar no mesmo namespace que o tipo de contêiner/intervalo (ou algum outro namespace associado ao tipo), porque ofor
loop de intervalo é especificado para encontrá-los somente via ADL.Isso pressupõe, é claro, que você não use a abordagem de função membro não estática, o que também é bom para ambos.
Isso é tudo.
Da documentação da Microsoft , entendo que é essencial garantir que as funções
begin
eend
sejam acessíveis no mesmonamespace
que seu contêiner. Essa acessibilidade permite que o compilador localize essas funções por meio de Argument-Dependent Lookup (ADL) .Não, não precisa ser (C++17) por causa do ADL, MRE para mostrar isso