Esto se sugirió en el desarrollo de C ++, y Stroustrup lo analiza en su "Diseño y evolución de C ++", páginas 153 y siguientes. La propuesta estaba bien formada y se basaba en la experiencia previa con Ada. No fue adoptado.
La razón más importante fue que nadie quería fomentar funciones con un gran número de parámetros. Cada función adicional en un idioma cuesta algo, y no había ningún deseo de agregar una función para facilitar la escritura de programas malos.
También planteó preguntas sobre cuáles eran los nombres de los parámetros canónicos, particularmente en la convención habitual de encabezado y archivo de código. Algunas organizaciones tenían nombres de parámetros más largos y descriptivos en el archivo .h, y nombres más cortos y fáciles de escribir en el archivo .cpp (sufijos de archivos sustitutos, según se desee). Exigir que estos sean los mismos supondría un costo adicional en la compilación, y mezclar los nombres entre los archivos de origen podría causar errores sutiles.
También se puede manejar mediante el uso de objetos en lugar de llamadas a funciones. En lugar de una llamada GetWindow con una docena de parámetros, cree una clase Window con una docena de variables privadas y agregue setters según sea necesario. Al encadenar a los setters, es posible escribir algo así my_window.SetColor(green).SetBorder(true).SetBorderSize(3);. También es posible tener diferentes funciones con diferentes valores predeterminados que llaman a la función que realmente hace el trabajo.
Si solo le preocupa el efecto de la documentación contentFetcher.DownloadNote(note, manual : true);, siempre puede escribir algo así contentFetcher.DownloadNote(note, /* manual */ true);, por lo que ni siquiera es muy útil en la documentación.