On Thu, 14 Feb 2013 15:33:19 -0500, Ivan Kazmenko <ga...@mail.ru> wrote:
... I get only exactly 3 * LIMIT postblit constructor calls, which is 300,000 instead of 11,389,556. While I still want to find where the excess 200,000 calls originate from, this is definitely asymptotically better than before
As I said elsewhere, the issue is D not having a good solution for accepting both rvalues and lvalues by ref. Jonathan mentioned auto ref, but it's not exactly implemented correctly.
In C++, it just takes all parameters as const T&, and that works for both lvalues and rvalues.
The extra 200k copies are from the implementation taking all parameters by value. If we didn't do that, sans a working auto ref, things like tree.insert(element(5)) would fail to compile (cannot pass an rvalue by reference)
-Steve