@@ -441,21 +441,6 @@ private enum IsCovariant(T) = false;
441441private enum IsCovariant (T : covariant! U, U) = true ;
442442private alias UnqualType (T : covariant! U, U) = U;
443443
444- template FilterVirtual (Q... )
445- {
446- template From (T... ) {
447- static if (Q.length == 0 ) {
448- alias From = AliasSeq! ();
449- } else {
450- static if (IsVirtual! (Q[0 ])) {
451- alias From = AliasSeq! (T[0 ], FilterVirtual! (Q[1 .. $]).From! (T[1 .. $]));
452- } else {
453- alias From = FilterVirtual! (Q[1 .. $]).From! (T[1 .. $]);
454- }
455- }
456- }
457- }
458-
459444private template Format (alias F, A... )
460445{
461446 static if (isInstanceOf! (AliasPack, A[0 ])) {
@@ -477,6 +462,36 @@ unittest
477462 static assert (F2 ! (AliasPack! (" int" , 1 )) == " int a1" );
478463}
479464
465+ // will PR
466+ template staticSlice (alias Pack, alias Positions)
467+ {
468+ static if (Positions.length == 0 ) {
469+ alias staticSlice = AliasPack! ();
470+ } else {
471+ alias staticSlice = AliasPack! (
472+ Pack.Unpack[Positions.Unpack[0 ]],
473+ staticSlice! (Pack, Positions.Tail).Unpack);
474+ }
475+ }
476+
477+ unittest
478+ {
479+ static assert (
480+ staticSlice! (
481+ AliasPack! (),
482+ AliasPack! ())
483+ .equals! ());
484+ static assert (
485+ staticSlice! (
486+ AliasPack! (int , char , float ),
487+ AliasPack! ()).equals! ());
488+ static assert (
489+ staticSlice! (
490+ AliasPack! (int , char , float ),
491+ AliasPack! (0 , 2 ))
492+ .equals! (int , float ));
493+ }
494+
480495// ============================================================================
481496// Method
482497
@@ -887,7 +902,11 @@ mixin template Registrar(TheMethod, alias Spec) {
887902 TheMethod.Name, SpecParams.stringof, &wrapper);
888903 }
889904
890- foreach (cls; openmethods.FilterVirtual! (TheMethod.QualParams).From! (SpecParams)) {
905+ foreach (
906+ cls;
907+ openmethods.staticSlice! (
908+ openmethods.AliasPack! (SpecParams),
909+ openmethods.AliasPack! (TheMethod.virtualPositions)).Unpack) {
891910 si.vp ~= cls.classinfo;
892911 }
893912
0 commit comments