+static ex asinh_conjugate(const ex & x)
+{
+ // conjugate(asinh(x))==asinh(conjugate(x)) unless on the branch cuts which
+ // run along the imaginary axis outside the interval [-I, +I].
+ if (x.info(info_flags::real))
+ return asinh(x);
+ if (is_exactly_a<numeric>(x)) {
+ const numeric x_re = ex_to<numeric>(x.real_part());
+ const numeric x_im = ex_to<numeric>(x.imag_part());
+ if (!x_re.is_zero() ||
+ (x_im > *_num_1_p && x_im < *_num1_p))
+ return asinh(x.conjugate());
+ }
+ return conjugate_function(asinh(x)).hold();
+}
+