On 05/12/2013 02:09 PM, Paolo Bolzoni wrote: > I need to user Red-Black trees with non-default sorting. > Here is a minimal example > ---- >8 > import std.container; > struct CC { > int a; > int b; } > > bool less(const ref CC lhs, const ref CC rhs) { > if (lhs.a != rhs.a) > return lhs.a < rhs.a; > else > return lhs.b < rhs.b; } > > void main() { > auto t = new RedBlackTree!(CC, "a.a != b.a ? a.a < b.a : a.b < > b.b"); } > 8< ---- > > It works, but I would like to pass the function "less" as comparison > operator since in my real problem the comparison is a more complex.
I think this is an issue with the template constraint of RedBlackTree. It passes the alias template parameter through binaryFun and I think that fails the check:
final class RedBlackTree(T, alias less = "a < b", bool allowDuplicates = false)
if(is(typeof(binaryFun!less(T.init, T.init)))) A workaround: auto t = new RedBlackTree!(CC, (a, b) => less(a, b)); Ali