ctor can be any complex expression