#!/usr/bin/rdmd

import std.algorithm;
import std.stdio;
import std.traits;

enum E { a, b, c };

struct S { E e; };

size_t counte(Range)(E e, Range src)
{
    return count!(x => x.e == e)(src);
}

void main()
{
    immutable(S)[] source = [ S(E.a), S(E.a), S(E.b) ];
    foreach (e; EnumMembers!E)
    {
        version (counte)
            size_t c = counte(e, source);
        else
            size_t c = count!(x => x.e == e)(source);
        writeln(e, " -> ", c);
    }
}