problem with template arguments deduction
    Zhenya 
    zheny at list.ru
       
    Fri Jun  1 07:28:13 PDT 2012
    
    
  
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);
вполне спокойно работает
в чем же разница?
    
    
More information about the Digitalmars-d-learn
mailing list