> I tried a "wrapper" type using opDispatch in dcollections, but what I ran into is, opDispatch uses its called parameter types to decide the function parameter types, you have very little control over that. I basically ended up abandoning the use of opDispatch and implemented each covered function by hand.
I managed to get this far (my file attached), using D-style runtime variadic functions... it seems to work well in most cases, with the notable exceptions being: (1) Things I already mentioned (2) Possibly ref/out/lazy parameters (I haven't tested them yet) Any thoughts? begin 644 std.dynamic.core.d M;6]D=6QE('-T9"YD>6YA;6EC+F-O<F4[#0H-"G!R:79A=&4@<W1A=&EC(&EM M<&]R="!S=&0N86QG;W)I=&AM.PT*<')I=F%T92!I;7!O<G0@8V]R92YE>&-E M<'1I;VXL('-T9"YE>&-E<'1I;VXL('-T9"YT>7!E='5P;&4L('-T9"YM971A M<W1R:6YG<RP@<W1D+G1R86ET<RP@8V]R92YV87)A<F<L('-T9"YS=&1I;SL- M"@T*86)S=')A8W0@8VQA<W,@1'EN86UI8PT*>PT*"7!R;W1E8W1E9"!A8G-T M<F%C="!$>6YA;6EC(&EN=F]K92AS=')I;F<@;65M8F5R+"`N+BXI.PT*"7!R M;W1E8W1E9"!T:&ES*"D@>R!A<W-E<G0H='EP96ED*'1H:7,I("$]('1Y<&5I M9"AT>7!E;V8H=&AI<RDI*3L@?0T*"7!U8FQI8R!$>6YA;6EC(&]P1&ES<&%T M8V@H<W1R:6YG(&YA;64L(%0N+BXI*%0@87)G<RD@>R!R971U<FX@=&AI<RYI M;G9O:V4H;F%M92P@87)G<RD[('T-"@EP<F]T96-T960@0'!R;W!E<G1Y(&%B M<W1R86-T('9O:60J('!686q...@i.pt*"7!U8FQI8R!`<')O<&5R='D@86)S M=')A8W0@5'EP94EN9F\@='EP94ED*"D[#0H)<'5B;&EC(')E9B!4(&%S*%0I M*"D@>R!A<W-E<G0H=&AI<RYT>7!E260@/3T@='EP96ED*%0I*3L@<F5T=7)N M("IC87-T*%0J*71H:7,N<%9A;'5E.R!]#0I]#0H-"G-T871I8R!B;V]L(&ES M1'EN86UI8RA4>7!E26YF;R!T*2![(&%U=&\@87-424-L87-S(#T@8V%S="A4 M>7!E26YF;U]#;&%S<RET.R!R971U<FX@87-424-L87-S("%I<R!N=6QL("8F M("AA<U1)0VQA<W,@/3T@='EP96ED*$1Y;F%M:6,I*3L@?0T*<W1A=&EC(&)O M;VP@:7-686QI9$%R9W5M96YT*%1Y<&5);F9O('1!<F<L(%1Y<&5);F9O('10 M87)A;2D@>R!R971U<FX@=$%R9R`]/2!T4&%R86T[('T@+R]&25A-13H@06QL M;W<@9F]R(&EM<&QI8VET(&-O;G9E<G-I;VYS("AB;W1H('=I9&5N:6YG(&-O M;G9E<G-I;VYS(&%N9"!S=&%T:6,@8V%S=',I#0H-"G!R:79A=&4@=&5M<&QA M=&4@<W1A=&EC24UA<$EN=&5R;F%L*'-I>F5?="!I4W1A<G0L(&%L:6%S($UA M<'!E<BP@5"XN+BD@>R!S=&%T:6,@:68@*%0N;&5N9W1H(#X@,"D@>R!A;&EA M<R!4>7!E5'5P;&4A*$UA<'!E<B$H:5-T87)T+"!46S!=*2P@<W1A=&EC24UA M<$EN=&5R;F%L(2AI4W1A<G0@*R`Q+"!-87!P97(L(%1;,2`N+B`D72DI('-T M871I8TE-87!);G1E<FYA;#L@?2!E;'-E('L@86QI87,@5'EP951U<&QE(2@I M('-T871I8TE-87!);G1E<FYA;#L@?2!]#0IT96UP;&%T92!S=&%T:6-)36%P M*&%L:6%S($UA<'!E<BP@5"XN+BD@>R!A;&EA<R!S=&%T:6-)36%P26YT97)N M86PA*#`L($UA<'!E<BP@5"D@<W1A=&EC24UA<#L@?0T*=&5M<&QA=&4@2F]I M;F5R*'-T<FEN9R!P87)A;5!R969I>"D@>R!T96UP;&%T92!*;VEN97(H<VEZ M95]T(&DL(%0N+BXI('L@96YU;2!*;VEN97(@/2!&;W)M870A*'%[)7,E<WTL M('!A<F%M4')E9FEX+"!I*3L@?2!]#0IT96UP;&%T92!S=&%T:6-*;VEN*'-T M<FEN9R!S97!A<F%T;W(L(%0N+BXI('L@<W1A=&EC(&EF("A4+FQE;F=T:"`^ M/2`R*2![(&5N=6T@<W1A=&EC2F]I;B`](%1;,%T@?B!S97!A<F%T;W(@?B!S M=&%T:6-*;VEN(2AS97!A<F%T;W(L(%1;,2`N+B`D72D[('T@96QS92!S=&%T M:6,@:68@*%0N;&5N9W1H(#X](#$I('L@96YU;2!S=&%T:6-*;VEN(#T@5%LP M73L@?2!E;'-E('L@96YU;2!S=&%T:6-*;VEN(#T@<7M].R!]('T-"@T*=&5M M<&QA=&4@=F%?;6%K95]L;V-A;%]A<F<H<W1R:6YG('!A<F%M4')E9FEX+"!A M;&EA<R!A<F=S*0T*>PT*"71E;7!L871E('9A7VUA:V5?;&]C86Q?87)G*'-I M>F5?="!I+"!4*0T*"7L-"@D)96YU;2!V85]M86ME7VQO8V%L7V%R9R`]($9O M<FUA="$H<7MA=71O("5S)7,@/2!I<T1Y;F%M:6,H7V%R9W5M96YT<ULE<UTI M(#\@=F%?87)G(2A$>6YA;6EC*2@E<RDN87,A*"5S*2`Z('9A7V%R9R$H)7,I M*"5S*3L@?2P-"@D)"0D)"7!A<F%M4')E9FEX+"!I+"!I+"!A<F=S+G-T<FEN M9V]F+"!4+G-T<FEN9V]F+"!4+G-T<FEN9V]F+"!A<F=S+G-T<FEN9V]F*3L- M"@E]#0I]#0H-"G1E;7!L871E(&ES5&5M<&QA=&4H5"XN+BD@>R!P<F%G;6$H M;7-G+"!T>7!E;V8H)E1;,%TI*3L@96YU;2!B;V]L(&ES5&5M<&QA=&4@/2`A M:7,H5%LP72D@)B8@(6ES*'1Y<&5O9B@F5%LP72DI.R!]("\O1F%L<V4@;F5G M871I=F5S/PT*#0IP<FEV871E(&-L87-S($1Y;F%M:6-/9BA4*2!I9B`H(6ES M*%0@.B!$>6YA;6EC*2D@.B!$>6YA;6EC#0I[#0H)5"!O8FH[#0H)=&AI<RA4 M(&]B:BD@>R!T:&ES+F]B:B`](&]B:CL@?0T*#0H)86QI87,@1'EN86UI8R!F M=6YC=&EO;BA$>6YA;6EC3V8A*%0I(&EN<W1A;F-E+"!4>7!E26YF;UM=(%]A M<F=U;65N=',L(')E9B!V85]L:7-T(&%R9W,I($EN=F]K97([#0H)<W1A=&EC M(&EM;75T86)L92A);G9O:V5R6W-T<FEN9UTI(&UE;6)E<G,[#0H)96YU;2!0 M05)!35]04D5&25@@/2!Q>W!A<F%M?3L-"@ES=&%T:6,@=&AI<R@I#0H)>PT* M"0E);G9O:V5R6W-T<FEN9UT@;65M8F5R<SL-"@D)875T;R!T96UP(#T@5"YI M;FET.PT*"0ES=&%T:6,@:68@*%]?=')A:71S*&-O;7!I;&5S+"!T>7!E;V8H M7U]T<F%I=',H86QL365M8F5R<RP@5"DI*2D-"@D)>PT*"0D)9F]R96%C:"`H M:2P@;65M8F5R.R!?7W1R86ET<RAA;&Q-96UB97)S+"!4*2D-"@D)"7L-"@D) M"0ES=&%T:6,@8V]N<W0@<W1R:6YG(%--14U"15)?3D%-12`]('%[*%0I+GT@ M?B!M96UB97([#0H)"0D)<W1A=&EC(&-O;G-T('-T<FEN9R!)345-0D527TY! M344@/2!Q>U0N:6YI="Y]('X@;65M8F5R.PT*"0D)"7-T871I8R!I9B`H;65M M8F5R(#T]('%[;W!5;F%R>7TI#0H)"0D)>PT*"0D)"0D-"@D)"0E]#0H)"0D) M96QS90T*"0D)"7L-"@D)"0D)<W1A=&EC(&EF("AI<RA&=6YC=&EO;E1Y<&5/ M9B$H;6EX:6XH4TU%34)%4E].04U%*2D@5$9N,BDI#0H)"0D)"7L-"@D)"0D) M"6%L:6%S(%1&;C(@5$9N.PT*"0D)"0E]#0H)"0D)?0T*"0D)"7-T871I8R!I M9B`H:7,H5$9N*2D-"@D)"0E[#0H)"0D)"7-T871I8R!I9B`H(5]?=')A:71S M*&ES4W1A=&EC1G5N8W1I;VXL(&UI>&EN*%--14U"15)?3D%-12DI*0T*"0D) M"0E[#0H)"0D)"0DO+W!R86=M82AM<V<L(")!9&1I;F<@;65M8F5R.B`B+"!M M96UB97(I.PT*"0D)"0D)875T;R!F;B`](&9U;F-T:6]N($1Y;F%M:6,H1'EN M86UI8T]F(2A4*2!I;G-T86YC92P@5'EP94EN9F];72!?87)G=6UE;G1S+"!R M968@=F%?;&ES="!A<F=S*0T*"0D)"0D)>PT*"0D)"0D)"6UI>&EN*$9O<FUA M="$H<7LE<PT*"0D)"0D)"0EA=71O(')E<W5L="`](&EN<W1A;F-E+F]B:BXE M<R@E<RD[#0H)"0D)"0D)"6%S<V5R="A?87)G=6UE;G1S+FQE;F=T:"`]/2!0 M87)A;65T97)4>7!E5'5P;&4A*%1&;BDN;&5N9W1H*3L-"@D)"0D)"0D)9F]R M96%C:"`H:2P@='EP93L@4&%R86UE=&5R5'EP951U<&QE(2A41FXI*0T*"0D) M"0D)"0E[(&%S<V5R="AI<T1Y;F%M:6,H7V%R9W5M96YT<UMI72D@/R!T<G5E M(#H@:7-686QI9$%R9W5M96YT*%]A<F=U;65N='-;:5TL('1Y<&5I9"AT>7!E M*2DI.R!]#0H)"0D)"0D)"7)E='5R;B!N97<@1'EN86UI8T]F(2A2971U<FY4 M>7!E(2A41FXI*2AR97-U;'0I.WTL#0H)"0D)"0D)"7-T871I8TIO:6XA*'%[ M('TL('-T871I8TE-87`A*'9A7VUA:V5?;&]C86Q?87)G(2A005)!35]04D5& M25@L(&%R9W,I+"!087)A;65T97)4>7!E5'5P;&4A*%1&;BDI*2P-"@D)"0D) M"0D)7U]T<F%I=',H86QL365M8F5R<RP@5"E;:5TL#0H)"0D)"0D)"7-T871I M8TIO:6XA*'%[+"!]+"!S=&%T:6-)36%P(2A*;VEN97(A*%!!4D%-7U!2149) M6"DL(%!A<F%M971E<E1Y<&54=7!L92$H1G5N8W1I;VY4>7!E3V8A*&UI>&EN M*%--14U"15)?3D%-12DI*2DI*2D[#0H)"0D)"0E].PT*"0D)"0D);65M8F5R M<UMM96UB97)=(#T@9FX[#0H)"0D)"7T-"@D)"0D)96QS90T*"0D)"0E[#0H) M"0D)"0DO+W!R86=M82AM<V<L("))9VYO<FEN9R!N;VXM:6YS=&%N8V4@;65M M8F5R.B`B+"!M96UB97(I.PT*"0D)"0E]#0H)"0D)?0T*"0D)"65L<V4-"@D) M"0E[#0H)"0D)"2\O<')A9VUA*&US9RP@(DEG;F]R:6YG(&YO;BUF=6YC=&EO M;B!M96UB97(Z("(L(&UE;6)E<BD[#0H)"0D)?0T*"0D)?0T*"0E]#0H)"41Y M;F%M:6-/9B$H5"DN;65M8F5R<R`](&UE;6)E<G,N87-S=6UE56YI<75E*"D[ M#0H)?0T*#0H)<')O=&5C=&5D(&]V97)R:61E($1Y;F%M:6,@:6YV;VME*'-T M<FEN9R!M96UB97(L("XN+BD-"@E[#0H)"6%U=&\@<$UE;6)E<B`](&UE;6)E M<B!I;B!M96UB97)S.PT*"0EI9B`H<$UE;6)E<B`]/2!N=6QL*2![('1H<F]W M(&YE=R!(:61D96Y&=6YC17)R;W(H='EP96ED*$1Y;F%M:6-/9B$H5"DI*3L@ M?0T*"0EV85]L:7-T(&%R9W,[#0H)"79A7W-T87)T*&%R9W,L(&UE;6)E<BD[ M#0H)"6%U=&\@<F5S=6QT(#T@*"IP365M8F5R*2AT:&ES+"!?87)G=6UE;G1S M+"!A<F=S*3L-"@D)=F%?96YD*&%R9W,I.PT*"0ER971U<FX@<F5S=6QT.PT* M"7T-"@T*"7!R;W1E8W1E9"!`<')O<&5R='D@;W9E<G)I9&4@5'EP94EN9F\@ M='EP94ED*"D@>R!R971U<FX@='EP96ED*'1H:7,N;V)J*3L@?0T*"7!R;W1E M8W1E9"!`<')O<&5R='D@;W9E<G)I9&4@=F]I9"H@<%9A;'5E*"D@>R!R971U M<FX@)G1H:7,N;V)J.R!]#0I]#0H-"G-T871I8R!$>6YA;6EC(&1Y;F%M:6,H M5"DH5"!V86QU92D@>R!S=&%T:6,@:68@*"%I<RA4(#H@1'EN86UI8RDI('L@ M<F5T=7)N(&YE=R!$>6YA;6EC3V8A*%0I*'9A;'5E*3L@?2!E;'-E('L@<F5T .=7)N('9A;'5E.R!]('T` ` end