В вашем коде или предположениях нет особых ошибок, за исключением того, что, возможно, важной особенностью списков инициализаторов является отсутствие ограничений последовательности (особенно верно для C ++). Точка с запятой является оператором секвенирования, поэтому списки инициализаторов вместо этого разделяются запятой.
Если вы не утверждаете, что спецификации верны по определению, я считаю, что языковая спецификация здесь неверна. Это частично нарушает важную особенность языка, которая является понятием только для чтения. Проблемы неоднозначности, упомянутые в других ответах, имеют, на мой взгляд, одну причину. Readonly - это очень навязчивая функция, и трудно сделать правильный шаг на полпути относительно правильности констант, и, что более важно, вредно для разработанных стилей кодирования.
То, что вы ищете и, вероятно, тем временем нашли, называется именованными аргументами: https://stackoverflow.com/a/21273185/2712726
Это не то, о чем вы просили, но приближается.
Также, чтобы быть справедливым, я должен добавить, что есть очень хорошо осведомленные авторы, которые будут полностью не согласны с этими взглядами на правильность констант, которые часто имеют разработчики C ++. Эрик Липперт, который по общему признанию имеет блестящие должности, написал это (ужасающее для разработчиков C ++) утверждение: https://stackoverflow.com/a/3266579/2712726