user-defined complex