https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82749

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ABI

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
We can easily change the return types of those functions (as long as we use an
abi_tag attribute so they mangle differently) but the bigger problem is that
the data members they return are defined incorrectly:

        std::vector<double> _M_den; // FIXME: should be vector<result_type>
        std::vector<double> _M_cp;  // FIXME: should be vector<result_type>


        std::vector<double> _M_den; // FIXME: should be vector<result_type>
        std::vector<double> _M_cp;  // FIXME: should be vector<result_type>
        std::vector<double> _M_m;   // FIXME: should be vector<result_type>

Changing these would break ABI. For result_type == double it's fine, and for
result_type == float we are wasting space storing double-precision values when
we should only store floats. But for result_type == long double the parameters
are imprecise.

Reply via email to