On Friday, 1 June 2012 at 12:53:16 UTC, Zhenya wrote:

ну как же map, filter и тд работают )
ну передавай свой delegate как параметр времени компиляции через !(...)
все будет ок ...
нууу так не прикольно.
А это часом не бага у DMD?

кстати если я заменяю
template bind(alias indeces)
{
        static if(is(typeof(indeces) : int[]))
        {
                auto bind(D,V...)(D dg,V values)
                {
                        static if(is(D d : R delegate(U), R, U...) &&
                                          is(V == 
Combination!(indeces,ParameterTypeTuple!D)))
                        {
                                static if(indeces.length > 1)
                                        return
bind!(update!(indeces,indeces[0])[1..$]).bind(Curry!(indeces[0])(dg,values[0]),values[1..$]);
                                else static if(indeces.length == 1)
                                        return Curry!(indeces[0])(dg,values[0]);
                        }
                }
        }
}

на

class Bind(alias indeces)
{
        static auto opCall(D,V...)(D dg,V values)
        {
                static if(is(D d : R delegate(U), R, U...) &&
                                  is(V == 
Combination!(indeces,ParameterTypeTuple!D)))
                {
                        static if(indeces.length > 1)
return Bind!(update!(indeces,indeces[0])[1..$])(Curry!(indeces[0])(dg,values[0]),values[1..$]);
                        else
                                return Curry!(indeces[0])(dg,values[0]);
                }
        }
}

то вот так

Bind!([1,0,3])(&checker!(int,int,int,int),2,1,4)(3);

вполне спокойно работает

в чем же разница?

Reply via email to