Great, with that workaround everything works correctly now. I can finally start playing around with my salesman's dna :p
There is one little problem left, the comparing problem. I can't really define an opcmp because a city isn't smaller or bigger than another city, it's simply another city. I tried defining opEquals but it still refuses to work (could be a problem on my end though). To clear things out: Comparing an array of structs with inside a dynamic array fails unless you add an opCmp (?or opEquals?) function to that struct. I thought comparing failed because the references to those dynamic arrays were different and that he was comparing references instead of values.