I solved it myself. I forget that I can use function as predicate

import std.stdio, std.algorithm;

class A: Exception { this(){ super(null); } }

class B: A {}

class C: B {}

class D: A {}

class E: A {}

class F: E {}

size_t countDerivations(TypeInfo_Class typeinfo)
{       
        size_t result;
        while(typeinfo !is null)
        {       //writeln(typeinfo.name);
                result ++;
                typeinfo = typeinfo.base;
        }
        return result;
}

void main()
{
        
        auto typeinfo = typeid(C);
        //while(typeinfo !is typeid(Throwable))
        //{     writeln(typeinfo.name);
        //      typeinfo = typeinfo.base;
        //}
        
        auto list = [ typeid(C), typeid(B), typeid(A), typeid(F) ];
        
        
        //writeln( countDerivations( typeid(C) ) );
        
auto sortedList = sort!( (a, b) { return countDerivations(a) > countDerivations(b); } )( list );
        writeln(sortedList);
}

Reply via email to