Forgot to add an opAssign in Wrapped as well: void opAssign(T)(T rhs) { payload = rhs; dg(); } That takes care of assigning and ops that change the object's state.