This in my opinion goes in same page as c++ templates or operator overloading; optional, different way to program but overall makes code more complicated to understand. Some programmer in the future, some day will be confused on why object B property gets changed same time as object A property.