Re[6]: А почему нет вызова функций с именованными аргументами?
От: uzhas Ниоткуда  
Дата: 15.09.14 10:55
Оценка:
Здравствуйте, enji, Вы писали:

E>ну и какие тут проблемы? Просто нельзя вызвать f с именоваными параметрами.

согласен, это согласуется с идеей ниже

E>Если у тебя в одной единице f(int a, int b), а в другой — f(int b, int a) — ну попытка вызвать f(.a=1, .b=2) — нарушение ODR. Такое же, как иметь две структуры с одинаковыми именами и разным содержимым.

это не согласуется с идеей ниже

E>Данная штука ведет себя примерно так же, как и параметры по умолчанию — т.е. разворачивается компилятором в обычный вызов функции сразу в месте вызова с той информацией, которая там компилятору доступна.

этот подход мне кажется вполне работоспособным

с другой стороны, ты выше написал про нарушение ODR, что противоречит этой идее. никакого нарушения не должно быть в примере выше, имена параметров не должны быть частью сигнатуры и проблем с экспортированными функциями опять же не будет

для случаев типа
//a.cpp
void f(int a, int b); // определение где-то в другом месте: в другом файле или либе
void f(int b, int a);

void g()
{
  f(.a = 4, .b = 5); //line (1)
}

надо просто отрубать возможность использования именованных аргументов (не компилировать такой код в строке (1) )
для дефолтных значений параметров ведь в стандарте есть несколько предложений для разруливания конфликтов, когда несколько объявлений идут в одной единице трансляции. можно что-то аналогичное прописать и для имен параметров
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.