P.S. More on C++ version:
Personally, I don't see why at all we should call the copy
constructor more than once per element. I mean, if we intend to
build a generic data structure, we sure need an internal node
object with some extra bytes (internal references and counters)
per each element, at least in the case of a red-black tree. So
why don't we just bind each element to that internal node once
and for all, and then, as long as the node is in the structure,
use the data contained in it only by reference? What do we
achieve if we choose to use it by value somewhere?
Well, when I just changed
"bool operator < (const element other) const"
to
"bool operator < (const element & other) const"
in the C++ version of the program, it gave me the exact 100,000
copy constructor calls which justifies the above paragraph.
Ouch... I had hopes GCC -O2 optimizes such obvious cases; perhaps
it's not that obvious from the compiler point of view.
-----
Ivan Kazmenko.