Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Evgeny.Panasyuk, Вы писали:
К>К>auto&& d = defaults(f, mandatory, mandatory, ondemand( []()->int { foo()+bar() } )); // первые два обязательные, третий вычисляется каждый раз
К>
mandatory могут идти только в начале или вперемешку? "В начале"
уже работает.
Для ленивых вычислений вырисовывается отличие от обычных defaults:
struct Data
{
int v[16];
};
Data &f(Data &&d=Data())
{
return d;
}
void use(Data &d)
{
d.v[0]=1;//...
}
int main()
{
use(f());
}
Тут заимствуется и возвращается память со стэка вызывающей функции.
В случае с defaults_set — такой финт не пройдёт. "Заимствование" должен делать первый operator() который вызывается.