http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50880
--- Comment #16 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-11-02 12:44:06 UTC --- Well, I guess this would be most of it: template<typename _Tp> std::complex<_Tp> __complex_acosh(const std::complex<_Tp>& __z) { return _Tp(2.0) * std::log(std::sqrt(_Tp(0.5) * (__z + _Tp(1.0))) + std::sqrt(_Tp(0.5) * (__z - _Tp(1.0)))); }