After reading http://icu-project.org/docs/papers/cpp_report/the_assignment_operator_revisited.html I think the current implementation of property assignment operators is still not completely correct:
"So there you go. A truly foolproof method of handling polymorphism in assignment operators involves declaring both a virtual and a non-virtual assignment operator in every class (except the root class of each inheritance hierarchy), with the non-virtual calling the virtual and the virtual asserting that both objects involved are the same class. Any time a calling function couldn’t guarantee the invariant would hold, it would have to avoid using the assignment operator and manually delete the object referenced by the target variable and new up a new one of the proper type.
Beautiful, huh?"
For most of our property classes, both operators are trivial, since the subclasses do not add new members. So maybe this does not affect us or we could limit the way properties can be assigned in some way. Or we can check some more literature for solutions to this kind of problem.