use different type in binary operator()