Isso foi sugerido no desenvolvimento do C ++, e Stroustrup discute isso em seu "Design e evolução do C ++", páginas 153 e seguintes. A proposta foi bem elaborada e baseou-se em experiências anteriores com a Ada. Não foi adotado.
O maior motivo foi que ninguém queria incentivar funções com um grande número de parâmetros. Cada recurso adicional em um idioma custa algo e não havia desejo de adicionar um recurso para facilitar a gravação de programas ruins.
Também levantou questões sobre quais eram os nomes de parâmetros canônicos, particularmente na convenção usual de cabeçalho e arquivo de código. Algumas organizações tinham nomes de parâmetro mais longos e mais descritivos no arquivo .h, e nomes mais curtos e fáceis de digitar no arquivo .cpp (sufixos de arquivo substitutos, conforme desejado). Exigir que esses sejam os mesmos seria um custo adicional na compilação, e a mistura de nomes entre os arquivos de origem pode causar erros sutis.
Também pode ser manipulado usando objetos em vez de chamadas de função. Em vez de uma chamada GetWindow com uma dúzia de parâmetros, crie uma classe Window com uma dúzia de variáveis privadas e adicione setters conforme necessário. Ao encadear os levantadores, é possível escrever algo parecido my_window.SetColor(green).SetBorder(true).SetBorderSize(3);. Também é possível ter funções diferentes com padrões diferentes que chamam a função que realmente faz o trabalho.
Se você está preocupado apenas com o efeito da documentação contentFetcher.DownloadNote(note, manual : true);, sempre pode escrever algo como contentFetcher.DownloadNote(note, /* manual */ true);, portanto, isso não ajuda muito na documentação.