ファンクタとD言語とdmd

Effective STLを読んで,ファンクタの方が速いよ!みたいな記述があったのでD言語で試してみたら,なんか普通に遅かった.そもそもクロージャとかリテラルで書けるD言語にはファンクタなんかいらないというわけですよ!
以下ソース.

import std.stdio, std.date;

void for_each(T, F)(ref T[] lhs, ref T[] rhs, F func)
{
    foreach (e; lhs)
        rhs ~= func(e);
}

struct Plus(int num)
{
    int opCall(int v)
    {
        return v + num;
    }
}

int plus(int num)(int v)
{
    return v + num;
}

void main()
{
    enum N = 10000;

    void test1()
    {
        int[] a = [1, 2, 3], b;

        foreach (i; 0..N)
            for_each(a, b, &plus!10);

        delete b;
    }

    void test2()
    {
        Plus!(10) p;
        int[] a = [1, 2, 3], b;

        foreach (i; 0..N)
            for_each(a, b, p);

        delete b;
    }

    void test3()
    {
        int[] a = [1, 2, 3], b;

        foreach (i; 0..N)
            for_each(a, b, (int v) { return v + 10; });

        delete b;
    }

    //auto r = benchmark!(test1)(1000);
    //auto r = benchmark!(test2)(1000);
    //auto r = benchmark!(test3)(1000);
    //writeln(r);
}

test2のファンクタでpを直接渡してないのは,そういうコードが書けないから.これからもD言語にはファンクタなんかいらないことがわかる(違