Ticket #6614: quaternion_cpp11.diff

File quaternion_cpp11.diff, 152.2 KB (added by Daryle Walker, 11 years ago)

Changes for C++11 adaptation

  • boost/math/octonion.hpp

     
    3737#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
    3838   
    3939#define    BOOST_OCTONION_ACCESSOR_GENERATOR(type)                      \
    40             type                        real() const                    \
     40            BOOST_CONSTEXPR type        real() const                    \
    4141            {                                                           \
    4242                return(a);                                              \
    4343            }                                                           \
    4444                                                                        \
    45             octonion<type>                unreal() const                \
     45            BOOST_CONSTEXPR octonion<type> unreal() const               \
    4646            {                                                           \
    4747                return( octonion<type>(static_cast<type>(0),b,c,d,e,f,g,h));   \
    4848            }                                                           \
    4949                                                                        \
    50             type                            R_component_1() const       \
     50            BOOST_CONSTEXPR type            R_component_1() const       \
    5151            {                                                           \
    5252                return(a);                                              \
    5353            }                                                           \
    5454                                                                        \
    55             type                            R_component_2() const       \
     55            BOOST_CONSTEXPR type            R_component_2() const       \
    5656            {                                                           \
    5757                return(b);                                              \
    5858            }                                                           \
    5959                                                                        \
    60             type                            R_component_3() const       \
     60            BOOST_CONSTEXPR type            R_component_3() const       \
    6161            {                                                           \
    6262                return(c);                                              \
    6363            }                                                           \
    6464                                                                        \
    65             type                            R_component_4() const       \
     65            BOOST_CONSTEXPR type            R_component_4() const       \
    6666            {                                                           \
    6767                return(d);                                              \
    6868            }                                                           \
    6969                                                                        \
    70             type                            R_component_5() const       \
     70            BOOST_CONSTEXPR type            R_component_5() const       \
    7171            {                                                           \
    7272                return(e);                                              \
    7373            }                                                           \
    7474                                                                        \
    75             type                            R_component_6() const       \
     75            BOOST_CONSTEXPR type            R_component_6() const       \
    7676            {                                                           \
    7777                return(f);                                              \
    7878            }                                                           \
    7979                                                                        \
    80             type                            R_component_7() const       \
     80            BOOST_CONSTEXPR type            R_component_7() const       \
    8181            {                                                           \
    8282                return(g);                                              \
    8383            }                                                           \
    8484                                                                        \
    85             type                            R_component_8() const       \
     85            BOOST_CONSTEXPR type            R_component_8() const       \
    8686            {                                                           \
    8787                return(h);                                              \
    8888            }                                                           \
    8989                                                                        \
    90             ::std::complex<type>            C_component_1() const       \
     90            BOOST_CONSTEXPR ::std::complex<type> C_component_1() const  \
    9191            {                                                           \
    9292                return(::std::complex<type>(a,b));                      \
    9393            }                                                           \
    9494                                                                        \
    95             ::std::complex<type>            C_component_2() const       \
     95            BOOST_CONSTEXPR ::std::complex<type> C_component_2() const  \
    9696            {                                                           \
    9797                return(::std::complex<type>(c,d));                      \
    9898            }                                                           \
    9999                                                                        \
    100             ::std::complex<type>            C_component_3() const       \
     100            BOOST_CONSTEXPR ::std::complex<type> C_component_3() const  \
    101101            {                                                           \
    102102                return(::std::complex<type>(e,f));                      \
    103103            }                                                           \
    104104                                                                        \
    105             ::std::complex<type>            C_component_4() const       \
     105            BOOST_CONSTEXPR ::std::complex<type> C_component_4() const  \
    106106            {                                                           \
    107107                return(::std::complex<type>(g,h));                      \
    108108            }                                                           \
    109109                                                                        \
    110             ::boost::math::quaternion<type>    H_component_1() const    \
     110            BOOST_CONSTEXPR ::boost::math::quaternion<type> H_component_1() const \
    111111            {                                                           \
    112112                return(::boost::math::quaternion<type>(a,b,c,d));       \
    113113            }                                                           \
    114114                                                                        \
    115             ::boost::math::quaternion<type>    H_component_2() const    \
     115            BOOST_CONSTEXPR ::boost::math::quaternion<type> H_component_2() const \
    116116            {                                                           \
    117117                return(::boost::math::quaternion<type>(e,f,g,h));       \
    118118            }
     
    201201            // constructor for O seen as R^8
    202202            // (also default constructor)
    203203           
    204             explicit                octonion(   T const & requested_a = T(),
     204            BOOST_CONSTEXPR         octonion(   T const & requested_a = T(),
    205205                                                T const & requested_b = T(),
    206206                                                T const & requested_c = T(),
    207207                                                T const & requested_d = T(),
     
    224224           
    225225            // constructor for H seen as C^4
    226226               
    227             explicit                octonion(   ::std::complex<T> const & z0,
     227            BOOST_CONSTEXPR         octonion(   ::std::complex<T> const & z0,
    228228                                                ::std::complex<T> const & z1 = ::std::complex<T>(),
    229229                                                ::std::complex<T> const & z2 = ::std::complex<T>(),
    230230                                                ::std::complex<T> const & z3 = ::std::complex<T>())
     
    243243           
    244244            // constructor for O seen as H^2
    245245               
    246             explicit                octonion(   ::boost::math::quaternion<T> const & q0,
     246            BOOST_CONSTEXPR         octonion(   ::boost::math::quaternion<T> const & q0,
    247247                                                ::boost::math::quaternion<T> const & q1 = ::boost::math::quaternion<T>())
    248248            :   a(q0.R_component_1()),
    249249                b(q0.R_component_2()),
     
    265265            // templated copy constructor
    266266           
    267267            template<typename X>
    268             explicit                octonion(octonion<X> const & a_recopier)
     268            BOOST_CONSTEXPR         octonion(octonion<X> const & a_recopier)
    269269            :   a(static_cast<T>(a_recopier.R_component_1())),
    270270                b(static_cast<T>(a_recopier.R_component_2())),
    271271                c(static_cast<T>(a_recopier.R_component_3())),
     
    683683        template<>    class octonion<long double>;
    684684       
    685685       
    686         // helper templates for converting copy constructors (declaration)
    687        
    688         namespace detail
    689         {
    690            
    691             template<   typename T,
    692                         typename U
    693                     >
    694             octonion<T>    octonion_type_converter(octonion<U> const & rhs);
    695         }
    696        
    697        
    698686        // implementation of octonion specialization
    699687       
    700688       
    701689#define    BOOST_OCTONION_CONSTRUCTOR_GENERATOR(type)                                                                               \
    702             explicit                    octonion(   type const & requested_a = static_cast<type>(0),                                \
     690            BOOST_CONSTEXPR             octonion(   type const & requested_a = static_cast<type>(0),                                \
    703691                                                    type const & requested_b = static_cast<type>(0),                                \
    704692                                                    type const & requested_c = static_cast<type>(0),                                \
    705693                                                    type const & requested_d = static_cast<type>(0),                                \
     
    707695                                                    type const & requested_f = static_cast<type>(0),                                \
    708696                                                    type const & requested_g = static_cast<type>(0),                                \
    709697                                                    type const & requested_h = static_cast<type>(0))                                \
     698            BOOST_NOEXCEPT                                                                                                          \
    710699            :   a(requested_a),                                                                                                     \
    711700                b(requested_b),                                                                                                     \
    712701                c(requested_c),                                                                                                     \
     
    718707            {                                                                                                                       \
    719708            }                                                                                                                       \
    720709                                                                                                                                    \
    721             explicit                    octonion(   ::std::complex<type> const & z0,                                                \
     710            BOOST_CONSTEXPR             octonion(   ::std::complex<type> const & z0,                                                \
    722711                                                    ::std::complex<type> const & z1 = ::std::complex<type>(),                       \
    723712                                                    ::std::complex<type> const & z2 = ::std::complex<type>(),                       \
    724713                                                    ::std::complex<type> const & z3 = ::std::complex<type>())                       \
     714            BOOST_NOEXCEPT                                                                                                          \
    725715            :   a(z0.real()),                                                                                                       \
    726716                b(z0.imag()),                                                                                                       \
    727717                c(z1.real()),                                                                                                       \
     
    733723            {                                                                                                                       \
    734724            }                                                                                                                       \
    735725                                                                                                                                    \
    736             explicit                    octonion(   ::boost::math::quaternion<type> const & q0,                                     \
     726            BOOST_CONSTEXPR             octonion(   ::boost::math::quaternion<type> const & q0,                                     \
    737727                                                    ::boost::math::quaternion<type> const & q1 = ::boost::math::quaternion<type>()) \
     728            BOOST_NOEXCEPT                                                                                                          \
    738729            :   a(q0.R_component_1()),                                                                                              \
    739730                b(q0.R_component_2()),                                                                                              \
    740731                c(q0.R_component_3()),                                                                                              \
     
    749740   
    750741#define    BOOST_OCTONION_MEMBER_ADD_GENERATOR_1(type)                  \
    751742            octonion<type> &            operator += (type const & rhs)  \
     743            BOOST_NOEXCEPT                                              \
    752744            {                                                           \
    753745                a += rhs;                                               \
    754746                                                                        \
     
    757749   
    758750#define    BOOST_OCTONION_MEMBER_ADD_GENERATOR_2(type)                                  \
    759751            octonion<type> &            operator += (::std::complex<type> const & rhs)  \
     752            BOOST_NOEXCEPT                                                              \
    760753            {                                                                           \
    761754                a += rhs.real();                                                        \
    762755                b += rhs.imag();                                                        \
     
    766759   
    767760#define    BOOST_OCTONION_MEMBER_ADD_GENERATOR_3(type)                                              \
    768761            octonion<type> &            operator += (::boost::math::quaternion<type> const & rhs)   \
     762            BOOST_NOEXCEPT                                                                          \
    769763            {                                                                                       \
    770764                a += rhs.R_component_1();                                                           \
    771765                b += rhs.R_component_2();                                                           \
     
    793787   
    794788#define    BOOST_OCTONION_MEMBER_SUB_GENERATOR_1(type)                  \
    795789            octonion<type> &            operator -= (type const & rhs)  \
     790            BOOST_NOEXCEPT                                              \
    796791            {                                                           \
    797792                a -= rhs;                                               \
    798793                                                                        \
     
    801796   
    802797#define    BOOST_OCTONION_MEMBER_SUB_GENERATOR_2(type)                                  \
    803798            octonion<type> &            operator -= (::std::complex<type> const & rhs)  \
     799            BOOST_NOEXCEPT                                                              \
    804800            {                                                                           \
    805801                a -= rhs.real();                                                        \
    806802                b -= rhs.imag();                                                        \
     
    810806   
    811807#define    BOOST_OCTONION_MEMBER_SUB_GENERATOR_3(type)                                              \
    812808            octonion<type> &            operator -= (::boost::math::quaternion<type> const & rhs)   \
     809            BOOST_NOEXCEPT                                                                          \
    813810            {                                                                                       \
    814811                a -= rhs.R_component_1();                                                           \
    815812                b -= rhs.R_component_2();                                                           \
     
    837834   
    838835#define    BOOST_OCTONION_MEMBER_MUL_GENERATOR_1(type)                   \
    839836            octonion<type> &            operator *= (type const & rhs)   \
     837            BOOST_NOEXCEPT                                               \
    840838            {                                                            \
    841839                a *= rhs;                                                \
    842840                b *= rhs;                                                \
     
    852850   
    853851#define    BOOST_OCTONION_MEMBER_MUL_GENERATOR_2(type)                                  \
    854852            octonion<type> &            operator *= (::std::complex<type> const & rhs)  \
     853            BOOST_NOEXCEPT                                                              \
    855854            {                                                                           \
    856855                type    ar = rhs.real();                                                \
    857856                type    br = rhs.imag();                                                \
     
    879878   
    880879#define    BOOST_OCTONION_MEMBER_MUL_GENERATOR_3(type)                                                    \
    881880            octonion<type> &            operator *= (::boost::math::quaternion<type> const & rhs)   \
     881            BOOST_NOEXCEPT                                                                          \
    882882            {                                                                                       \
    883883                type    ar = rhs.R_component_1();                                                   \
    884884                type    br = rhs.R_component_2();                                                   \
     
    949949   
    950950#define    BOOST_OCTONION_MEMBER_DIV_GENERATOR_1(type)                  \
    951951            octonion<type> &            operator /= (type const & rhs)  \
     952            BOOST_NOEXCEPT                                              \
    952953            {                                                           \
    953954                a /= rhs;                                               \
    954955                b /= rhs;                                               \
     
    14091410           
    14101411            // explicit copy constructors (precision-loosing converters)
    14111412           
    1412             explicit                    octonion(octonion<double> const & a_recopier)
    1413             {
    1414                 *this = detail::octonion_type_converter<float, double>(a_recopier);
    1415             }
     1413            explicit BOOST_CONSTEXPR octonion(octonion<double> const & a_recopier)
     1414            BOOST_NOEXCEPT ;
    14161415           
    1417             explicit                    octonion(octonion<long double> const & a_recopier)
    1418             {
    1419                 *this = detail::octonion_type_converter<float, long double>(a_recopier);
    1420             }
     1416            explicit BOOST_CONSTEXPR octonion(octonion<long double> const & a_recopier)
     1417            BOOST_NOEXCEPT ;
    14211418           
    14221419            // destructor
    14231420            // (this is taken care of by the compiler itself)
     
    14711468           
    14721469            // converting copy constructor
    14731470           
    1474             explicit                    octonion(octonion<float> const & a_recopier)
     1471            BOOST_CONSTEXPR             octonion(octonion<float> const & a_recopier)
     1472            BOOST_NOEXCEPT
     1473            :   a(a_recopier.R_component_1()),
     1474                b(a_recopier.R_component_2()),
     1475                c(a_recopier.R_component_3()),
     1476                d(a_recopier.R_component_4()),
     1477                e(a_recopier.R_component_5()),
     1478                f(a_recopier.R_component_6()),
     1479                g(a_recopier.R_component_7()),
     1480                h(a_recopier.R_component_8())
    14751481            {
    1476                 *this = detail::octonion_type_converter<double, float>(a_recopier);
     1482                // nothing to do!
    14771483            }
    14781484           
    14791485            // explicit copy constructors (precision-loosing converters)
    14801486           
    1481             explicit                    octonion(octonion<long double> const & a_recopier)
    1482             {
    1483                 *this = detail::octonion_type_converter<double, long double>(a_recopier);
    1484             }
     1487            explicit BOOST_CONSTEXPR    octonion(octonion<long double> const & a_recopier)
     1488            BOOST_NOEXCEPT ;
    14851489           
    14861490            // destructor
    14871491            // (this is taken care of by the compiler itself)
     
    15331537            // UNtemplated copy constructor
    15341538            // (this is taken care of by the compiler itself)
    15351539           
    1536             // converting copy constructor
     1540            // converting copy constructors
    15371541           
    1538             explicit                            octonion(octonion<float> const & a_recopier)
     1542            BOOST_CONSTEXPR             octonion(octonion<float> const & a_recopier)
     1543            BOOST_NOEXCEPT
     1544            :   a(a_recopier.R_component_1()),
     1545                b(a_recopier.R_component_2()),
     1546                c(a_recopier.R_component_3()),
     1547                d(a_recopier.R_component_4()),
     1548                e(a_recopier.R_component_5()),
     1549                f(a_recopier.R_component_6()),
     1550                g(a_recopier.R_component_7()),
     1551                h(a_recopier.R_component_8())
    15391552            {
    1540                 *this = detail::octonion_type_converter<long double, float>(a_recopier);
     1553                // nothing to do!
    15411554            }
    15421555           
    1543            
    1544             explicit                            octonion(octonion<double> const & a_recopier)
     1556            BOOST_CONSTEXPR             octonion(octonion<double> const & a_recopier)
     1557            BOOST_NOEXCEPT
     1558            :   a(a_recopier.R_component_1()),
     1559                b(a_recopier.R_component_2()),
     1560                c(a_recopier.R_component_3()),
     1561                d(a_recopier.R_component_4()),
     1562                e(a_recopier.R_component_5()),
     1563                f(a_recopier.R_component_6()),
     1564                g(a_recopier.R_component_7()),
     1565                h(a_recopier.R_component_8())
    15451566            {
    1546                 *this = detail::octonion_type_converter<long double, double>(a_recopier);
     1567                // nothing to do!
    15471568            }
    15481569           
    15491570           
     
    15851606        };
    15861607       
    15871608       
     1609        BOOST_CONSTEXPR inline
     1610        octonion<float>::octonion( octonion<double> const &a_recopier )
     1611        BOOST_NOEXCEPT
     1612            :   a(static_cast<float>(a_recopier.R_component_1())),
     1613                b(static_cast<float>(a_recopier.R_component_2())),
     1614                c(static_cast<float>(a_recopier.R_component_3())),
     1615                d(static_cast<float>(a_recopier.R_component_4())),
     1616                e(static_cast<float>(a_recopier.R_component_5())),
     1617                f(static_cast<float>(a_recopier.R_component_6())),
     1618                g(static_cast<float>(a_recopier.R_component_7())),
     1619                h(static_cast<float>(a_recopier.R_component_8()))
     1620        {
     1621            //nothing to do!
     1622        }
     1623
     1624        BOOST_CONSTEXPR inline
     1625        octonion<float>::octonion( octonion<long double> const &a_recopier )
     1626        BOOST_NOEXCEPT
     1627            :   a(static_cast<float>(a_recopier.R_component_1())),
     1628                b(static_cast<float>(a_recopier.R_component_2())),
     1629                c(static_cast<float>(a_recopier.R_component_3())),
     1630                d(static_cast<float>(a_recopier.R_component_4())),
     1631                e(static_cast<float>(a_recopier.R_component_5())),
     1632                f(static_cast<float>(a_recopier.R_component_6())),
     1633                g(static_cast<float>(a_recopier.R_component_7())),
     1634                h(static_cast<float>(a_recopier.R_component_8()))
     1635        {
     1636            //nothing to do!
     1637        }
     1638
     1639        BOOST_CONSTEXPR inline
     1640        octonion<double>::octonion( octonion<long double> const &a_recopier )
     1641        BOOST_NOEXCEPT
     1642            :   a(static_cast<double>(a_recopier.R_component_1())),
     1643                b(static_cast<double>(a_recopier.R_component_2())),
     1644                c(static_cast<double>(a_recopier.R_component_3())),
     1645                d(static_cast<double>(a_recopier.R_component_4())),
     1646                e(static_cast<double>(a_recopier.R_component_5())),
     1647                f(static_cast<double>(a_recopier.R_component_6())),
     1648                g(static_cast<double>(a_recopier.R_component_7())),
     1649                h(static_cast<double>(a_recopier.R_component_8()))
     1650        {
     1651            //nothing to do!
     1652        }
     1653
     1654
    15881655#undef    BOOST_OCTONION_CONSTRUCTOR_GENERATOR
    15891656       
    15901657#undef    BOOST_OCTONION_MEMBER_ALGEBRAIC_GENERATOR
     
    16931760       
    16941761       
    16951762        template<typename T>
    1696         inline octonion<T>                        operator + (octonion<T> const & o)
     1763        BOOST_CONSTEXPR inline octonion<T>        operator + (octonion<T> const & o)
    16971764        {
    16981765            return(o);
    16991766        }
    17001767       
    17011768       
    17021769        template<typename T>
    1703         inline octonion<T>                        operator - (octonion<T> const & o)
     1770        BOOST_CONSTEXPR inline octonion<T>        operator - (octonion<T> const & o)
    17041771        {
    17051772            return(octonion<T>(-o.R_component_1(),-o.R_component_2(),-o.R_component_3(),-o.R_component_4(),-o.R_component_5(),-o.R_component_6(),-o.R_component_7(),-o.R_component_8()));
    17061773        }
    17071774       
    17081775       
    17091776        template<typename T>
    1710         inline bool                                operator == (T const & lhs, octonion<T> const & rhs)
     1777        BOOST_CONSTEXPR inline bool                operator == (T const & lhs, octonion<T> const & rhs)
    17111778        {
    17121779            return(
    17131780                        (rhs.R_component_1() == lhs)&&
     
    17231790       
    17241791       
    17251792        template<typename T>
    1726         inline bool                                operator == (octonion<T> const & lhs, T const & rhs)
     1793        BOOST_CONSTEXPR inline bool                operator == (octonion<T> const & lhs, T const & rhs)
    17271794        {
    17281795            return(
    17291796                        (lhs.R_component_1() == rhs)&&
     
    17391806       
    17401807       
    17411808        template<typename T>
    1742         inline bool                                operator == (::std::complex<T> const & lhs, octonion<T> const & rhs)
     1809        BOOST_CONSTEXPR inline bool                operator == (::std::complex<T> const & lhs, octonion<T> const & rhs)
    17431810        {
    17441811            return(
    17451812                        (rhs.R_component_1() == lhs.real())&&
     
    17551822       
    17561823       
    17571824        template<typename T>
    1758         inline bool                                operator == (octonion<T> const & lhs, ::std::complex<T> const & rhs)
     1825        BOOST_CONSTEXPR inline bool                operator == (octonion<T> const & lhs, ::std::complex<T> const & rhs)
    17591826        {
    17601827            return(
    17611828                        (lhs.R_component_1() == rhs.real())&&
     
    17711838       
    17721839       
    17731840        template<typename T>
    1774         inline bool                                operator == (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs)
     1841        BOOST_CONSTEXPR inline bool                operator == (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs)
    17751842        {
    17761843            return(
    17771844                        (rhs.R_component_1() == lhs.R_component_1())&&
     
    17871854       
    17881855       
    17891856        template<typename T>
    1790         inline bool                                operator == (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs)
     1857        BOOST_CONSTEXPR inline bool                operator == (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs)
    17911858        {
    17921859            return(
    17931860                        (lhs.R_component_1() == rhs.R_component_1())&&
     
    18031870       
    18041871       
    18051872        template<typename T>
    1806         inline bool                                operator == (octonion<T> const & lhs, octonion<T> const & rhs)
     1873        BOOST_CONSTEXPR inline bool                operator == (octonion<T> const & lhs, octonion<T> const & rhs)
    18071874        {
    18081875            return(
    18091876                        (rhs.R_component_1() == lhs.R_component_1())&&
     
    18241891        }
    18251892       
    18261893        template<typename T>
    1827         inline bool                                operator != (T const & lhs, octonion<T> const & rhs)
     1894        BOOST_CONSTEXPR inline bool                operator != (T const & lhs, octonion<T> const & rhs)
    18281895        BOOST_OCTONION_NOT_EQUAL_GENERATOR
    18291896       
    18301897        template<typename T>
    1831         inline bool                                operator != (octonion<T> const & lhs, T const & rhs)
     1898        BOOST_CONSTEXPR inline bool                operator != (octonion<T> const & lhs, T const & rhs)
    18321899        BOOST_OCTONION_NOT_EQUAL_GENERATOR
    18331900       
    18341901        template<typename T>
    1835         inline bool                                operator != (::std::complex<T> const & lhs, octonion<T> const & rhs)
     1902        BOOST_CONSTEXPR inline bool                operator != (::std::complex<T> const & lhs, octonion<T> const & rhs)
    18361903        BOOST_OCTONION_NOT_EQUAL_GENERATOR
    18371904       
    18381905        template<typename T>
    1839         inline bool                                operator != (octonion<T> const & lhs, ::std::complex<T> const & rhs)
     1906        BOOST_CONSTEXPR inline bool                operator != (octonion<T> const & lhs, ::std::complex<T> const & rhs)
    18401907        BOOST_OCTONION_NOT_EQUAL_GENERATOR
    18411908       
    18421909        template<typename T>
    1843         inline bool                                operator != (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs)
     1910        BOOST_CONSTEXPR inline bool                operator != (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs)
    18441911        BOOST_OCTONION_NOT_EQUAL_GENERATOR
    18451912       
    18461913        template<typename T>
    1847         inline bool                                operator != (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs)
     1914        BOOST_CONSTEXPR inline bool                operator != (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs)
    18481915        BOOST_OCTONION_NOT_EQUAL_GENERATOR
    18491916       
    18501917        template<typename T>
    1851         inline bool                                operator != (octonion<T> const & lhs, octonion<T> const & rhs)
     1918        BOOST_CONSTEXPR inline bool                operator != (octonion<T> const & lhs, octonion<T> const & rhs)
    18521919        BOOST_OCTONION_NOT_EQUAL_GENERATOR
    18531920       
    18541921    #undef    BOOST_OCTONION_NOT_EQUAL_GENERATOR
     
    43674434        // values
    43684435       
    43694436        template<typename T>
    4370         inline T                                real(octonion<T> const & o)
     4437        BOOST_CONSTEXPR inline T                real(octonion<T> const & o)
    43714438        {
    43724439            return(o.real());
    43734440        }
    43744441       
    43754442       
    43764443        template<typename T>
    4377         inline octonion<T>                        unreal(octonion<T> const & o)
     4444        BOOST_CONSTEXPR inline octonion<T>        unreal(octonion<T> const & o)
    43784445        {
    43794446            return(o.unreal());
    43804447        }
     
    44684535#undef    BOOST_OCTONION_VALARRAY_LOADER
    44694536       
    44704537       
    4471         // Note:    This is the Cayley norm, not the Euclidian norm...
    4472        
    44734538        template<typename T>
    4474         inline T                                norm(octonion<T> const & o)
     4539        BOOST_CONSTEXPR inline octonion<T>        conj(octonion<T> const & o)
    44754540        {
    4476             return(real(o*conj(o)));
    4477         }
    4478        
    4479        
    4480         template<typename T>
    4481         inline octonion<T>                        conj(octonion<T> const & o)
    4482         {
    44834541            return(octonion<T>( +o.R_component_1(),
    44844542                                -o.R_component_2(),
    44854543                                -o.R_component_3(),
     
    44914549        }
    44924550       
    44934551       
     4552        // Note:    This is the Cayley norm, not the Euclidian norm...
     4553       
     4554        template<typename T>
     4555        BOOST_CONSTEXPR inline T                norm(octonion<T> const & o)
     4556        {
     4557            return(real(o*conj(o)));
     4558        }
     4559       
     4560       
    44944561        // Note:    There is little point, for the octonions, to introduce the equivalents
    44954562        //            to the complex "arg" and the quaternionic "cylindropolar".
    44964563       
     
    47204787                return(pow(octonion<T>(static_cast<T>(1))/o,-n));
    47214788            }
    47224789        }
    4723        
    4724        
    4725         // helper templates for converting copy constructors (definition)
    4726        
    4727         namespace detail
    4728         {
    4729            
    4730             template<   typename T,
    4731                         typename U
    4732                     >
    4733             octonion<T>    octonion_type_converter(octonion<U> const & rhs)
    4734             {
    4735                 return(octonion<T>( static_cast<T>(rhs.R_component_1()),
    4736                                     static_cast<T>(rhs.R_component_2()),
    4737                                     static_cast<T>(rhs.R_component_3()),
    4738                                     static_cast<T>(rhs.R_component_4()),
    4739                                     static_cast<T>(rhs.R_component_5()),
    4740                                     static_cast<T>(rhs.R_component_6()),
    4741                                     static_cast<T>(rhs.R_component_7()),
    4742                                     static_cast<T>(rhs.R_component_8())));
    4743             }
    4744         }
    47454790    }
    47464791}
    47474792
  • boost/math/quaternion.hpp

     
    5252#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
    5353
    5454#define    BOOST_QUATERNION_ACCESSOR_GENERATOR(type)                    \
    55             type                    real() const                        \
     55            BOOST_CONSTEXPR type                    real() const        \
    5656            {                                                           \
    5757                return(a);                                              \
    5858            }                                                           \
    5959                                                                        \
    60             quaternion<type>        unreal() const                      \
     60            BOOST_CONSTEXPR quaternion<type>        unreal() const      \
    6161            {                                                           \
    6262                return(quaternion<type>(static_cast<type>(0),b,c,d));   \
    6363            }                                                           \
    6464                                                                        \
    65             type                    R_component_1() const               \
     65            BOOST_CONSTEXPR type    R_component_1() const               \
    6666            {                                                           \
    6767                return(a);                                              \
    6868            }                                                           \
    6969                                                                        \
    70             type                    R_component_2() const               \
     70            BOOST_CONSTEXPR type    R_component_2() const               \
    7171            {                                                           \
    7272                return(b);                                              \
    7373            }                                                           \
    7474                                                                        \
    75             type                    R_component_3() const               \
     75            BOOST_CONSTEXPR type    R_component_3() const               \
    7676            {                                                           \
    7777                return(c);                                              \
    7878            }                                                           \
    7979                                                                        \
    80             type                    R_component_4() const               \
     80            BOOST_CONSTEXPR type    R_component_4() const               \
    8181            {                                                           \
    8282                return(d);                                              \
    8383            }                                                           \
    8484                                                                        \
    85             ::std::complex<type>    C_component_1() const              \
     85            BOOST_CONSTEXPR ::std::complex<type>  C_component_1() const \
    8686            {                                                           \
    8787                return(::std::complex<type>(a,b));                      \
    8888            }                                                           \
    8989                                                                        \
    90             ::std::complex<type>    C_component_2() const              \
     90            BOOST_CONSTEXPR ::std::complex<type>  C_component_2() const \
    9191            {                                                           \
    9292                return(::std::complex<type>(c,d));                      \
    9393            }
     
    153153            // constructor for H seen as R^4
    154154            // (also default constructor)
    155155           
    156             explicit            quaternion( T const & requested_a = T(),
     156            BOOST_CONSTEXPR     quaternion( T const & requested_a = T(),
    157157                                            T const & requested_b = T(),
    158158                                            T const & requested_c = T(),
    159159                                            T const & requested_d = T())
     
    168168           
    169169            // constructor for H seen as C^2
    170170               
    171             explicit            quaternion( ::std::complex<T> const & z0,
     171            BOOST_CONSTEXPR     quaternion( ::std::complex<T> const & z0,
    172172                                            ::std::complex<T> const & z1 = ::std::complex<T>())
    173173            :   a(z0.real()),
    174174                b(z0.imag()),
     
    186186            // templated copy constructor
    187187           
    188188            template<typename X>
    189             explicit            quaternion(quaternion<X> const & a_recopier)
     189            BOOST_CONSTEXPR     quaternion(quaternion<X> const & a_recopier)
    190190            :   a(static_cast<T>(a_recopier.R_component_1())),
    191191                b(static_cast<T>(a_recopier.R_component_2())),
    192192                c(static_cast<T>(a_recopier.R_component_3())),
     
    436436        template<>    class quaternion<long double>;
    437437       
    438438       
    439         // helper templates for converting copy constructors (declaration)
    440        
    441         namespace detail
    442         {
    443            
    444             template<   typename T,
    445                         typename U
    446                     >
    447             quaternion<T>    quaternion_type_converter(quaternion<U> const & rhs);
    448         }
    449        
    450        
    451439        // implementation of quaternion specialization
    452440       
    453441       
    454442#define    BOOST_QUATERNION_CONSTRUCTOR_GENERATOR(type)                                                 \
    455             explicit            quaternion( type const & requested_a = static_cast<type>(0),            \
     443            BOOST_CONSTEXPR     quaternion( type const & requested_a = static_cast<type>(0),            \
    456444                                            type const & requested_b = static_cast<type>(0),            \
    457445                                            type const & requested_c = static_cast<type>(0),            \
    458446                                            type const & requested_d = static_cast<type>(0))            \
     447            BOOST_NOEXCEPT                                                                              \
    459448            :   a(requested_a),                                                                         \
    460449                b(requested_b),                                                                         \
    461450                c(requested_c),                                                                         \
     
    463452            {                                                                                           \
    464453            }                                                                                           \
    465454                                                                                                        \
    466             explicit            quaternion( ::std::complex<type> const & z0,                            \
     455            BOOST_CONSTEXPR     quaternion( ::std::complex<type> const & z0,                            \
    467456                                            ::std::complex<type> const & z1 = ::std::complex<type>())   \
     457            BOOST_NOEXCEPT                                                                              \
    468458            :   a(z0.real()),                                                                           \
    469459                b(z0.imag()),                                                                           \
    470460                c(z1.real()),                                                                           \
     
    475465       
    476466#define    BOOST_QUATERNION_MEMBER_ADD_GENERATOR_1(type)             \
    477467            quaternion<type> &        operator += (type const & rhs) \
     468            BOOST_NOEXCEPT                                           \
    478469            {                                                        \
    479470                a += rhs;                                            \
    480471                                                                     \
     
    483474   
    484475#define    BOOST_QUATERNION_MEMBER_ADD_GENERATOR_2(type)                             \
    485476            quaternion<type> &        operator += (::std::complex<type> const & rhs) \
     477            BOOST_NOEXCEPT                                                           \
    486478            {                                                                        \
    487479                a += rhs.real();                                                     \
    488480                b += rhs.imag();                                                     \
     
    504496   
    505497#define    BOOST_QUATERNION_MEMBER_SUB_GENERATOR_1(type)             \
    506498            quaternion<type> &        operator -= (type const & rhs) \
     499            BOOST_NOEXCEPT                                           \
    507500            {                                                        \
    508501                a -= rhs;                                            \
    509502                                                                     \
     
    512505   
    513506#define    BOOST_QUATERNION_MEMBER_SUB_GENERATOR_2(type)                             \
    514507            quaternion<type> &        operator -= (::std::complex<type> const & rhs) \
     508            BOOST_NOEXCEPT                                                           \
    515509            {                                                                        \
    516510                a -= rhs.real();                                                     \
    517511                b -= rhs.imag();                                                     \
     
    533527   
    534528#define    BOOST_QUATERNION_MEMBER_MUL_GENERATOR_1(type)             \
    535529            quaternion<type> &        operator *= (type const & rhs) \
     530            BOOST_NOEXCEPT                                           \
    536531            {                                                        \
    537532                a *= rhs;                                            \
    538533                b *= rhs;                                            \
     
    544539   
    545540#define    BOOST_QUATERNION_MEMBER_MUL_GENERATOR_2(type)                             \
    546541            quaternion<type> &        operator *= (::std::complex<type> const & rhs) \
     542            BOOST_NOEXCEPT                                                           \
    547543            {                                                                        \
    548544                type    ar = rhs.real();                                             \
    549545                type    br = rhs.imag();                                             \
     
    592588   
    593589#define    BOOST_QUATERNION_MEMBER_DIV_GENERATOR_1(type)             \
    594590            quaternion<type> &        operator /= (type const & rhs) \
     591            BOOST_NOEXCEPT                                           \
    595592            {                                                        \
    596593                a /= rhs;                                            \
    597594                b /= rhs;                                            \
     
    855852           
    856853            // explicit copy constructors (precision-loosing converters)
    857854           
    858             explicit            quaternion(quaternion<double> const & a_recopier)
    859             {
    860                 *this = detail::quaternion_type_converter<float, double>(a_recopier);
    861             }
     855            explicit BOOST_CONSTEXPR quaternion(quaternion<double> const & a_recopier)
     856            BOOST_NOEXCEPT ;
    862857           
    863             explicit            quaternion(quaternion<long double> const & a_recopier)
    864             {
    865                 *this = detail::quaternion_type_converter<float, long double>(a_recopier);
    866             }
     858            explicit BOOST_CONSTEXPR quaternion(quaternion<long double> const & a_recopier)
     859            BOOST_NOEXCEPT ;
    867860           
    868861            // destructor
    869862            // (this is taken care of by the compiler itself)
     
    916909           
    917910            // converting copy constructor
    918911           
    919             explicit                quaternion(quaternion<float> const & a_recopier)
     912            BOOST_CONSTEXPR         quaternion(quaternion<float> const & a_recopier)
     913            BOOST_NOEXCEPT
     914            :   a(a_recopier.R_component_1()),
     915                b(a_recopier.R_component_2()),
     916                c(a_recopier.R_component_3()),
     917                d(a_recopier.R_component_4())
    920918            {
    921                 *this = detail::quaternion_type_converter<double, float>(a_recopier);
     919                // nothing to do!
    922920            }
    923921           
    924922            // explicit copy constructors (precision-loosing converters)
    925923           
    926             explicit                quaternion(quaternion<long double> const & a_recopier)
    927             {
    928                 *this = detail::quaternion_type_converter<double, long double>(a_recopier);
    929             }
     924            explicit BOOST_CONSTEXPR quaternion(quaternion<long double> const & a_recopier)
     925            BOOST_NOEXCEPT ;
    930926           
    931927            // destructor
    932928            // (this is taken care of by the compiler itself)
     
    979975           
    980976            // converting copy constructors
    981977           
    982             explicit                    quaternion(quaternion<float> const & a_recopier)
     978            BOOST_CONSTEXPR             quaternion(quaternion<float> const & a_recopier)
     979            BOOST_NOEXCEPT
     980            :   a(a_recopier.R_component_1()),
     981                b(a_recopier.R_component_2()),
     982                c(a_recopier.R_component_3()),
     983                d(a_recopier.R_component_4())
    983984            {
    984                 *this = detail::quaternion_type_converter<long double, float>(a_recopier);
     985                // nothing to do!
    985986            }
    986987           
    987             explicit                    quaternion(quaternion<double> const & a_recopier)
     988            BOOST_CONSTEXPR             quaternion(quaternion<double> const & a_recopier)
     989            BOOST_NOEXCEPT
     990            :   a(a_recopier.R_component_1()),
     991                b(a_recopier.R_component_2()),
     992                c(a_recopier.R_component_3()),
     993                d(a_recopier.R_component_4())
    988994            {
    989                 *this = detail::quaternion_type_converter<long double, double>(a_recopier);
     995                // nothing to do!
    990996            }
    991997           
    992998            // destructor
     
    10261032        };
    10271033       
    10281034       
     1035        BOOST_CONSTEXPR inline
     1036        quaternion<float>::quaternion( quaternion<double> const &a_recopier )
     1037        BOOST_NOEXCEPT
     1038            :   a(static_cast<float>(a_recopier.R_component_1())),
     1039                b(static_cast<float>(a_recopier.R_component_2())),
     1040                c(static_cast<float>(a_recopier.R_component_3())),
     1041                d(static_cast<float>(a_recopier.R_component_4()))
     1042        {
     1043            //nothing to do!
     1044        }
     1045
     1046        BOOST_CONSTEXPR inline
     1047        quaternion<float>::quaternion( quaternion<long double> const &a_recopier )
     1048        BOOST_NOEXCEPT
     1049            :   a(static_cast<float>(a_recopier.R_component_1())),
     1050                b(static_cast<float>(a_recopier.R_component_2())),
     1051                c(static_cast<float>(a_recopier.R_component_3())),
     1052                d(static_cast<float>(a_recopier.R_component_4()))
     1053        {
     1054            //nothing to do!
     1055        }
     1056
     1057        BOOST_CONSTEXPR inline
     1058        quaternion<double>::quaternion( quaternion<long double> const &a_recopier )
     1059        BOOST_NOEXCEPT
     1060            :   a(static_cast<double>(a_recopier.R_component_1())),
     1061                b(static_cast<double>(a_recopier.R_component_2())),
     1062                c(static_cast<double>(a_recopier.R_component_3())),
     1063                d(static_cast<double>(a_recopier.R_component_4()))
     1064        {
     1065            //nothing to do!
     1066        }
     1067
     1068
    10291069#undef    BOOST_QUATERNION_MEMBER_ALGEBRAIC_GENERATOR
    10301070#undef    BOOST_QUATERNION_MEMBER_ADD_GENERATOR
    10311071#undef    BOOST_QUATERNION_MEMBER_SUB_GENERATOR
     
    11141154       
    11151155       
    11161156        template<typename T>
    1117         inline quaternion<T>                    operator + (quaternion<T> const & q)
     1157        BOOST_CONSTEXPR inline quaternion<T>    operator + (quaternion<T> const & q)
    11181158        {
    11191159            return(q);
    11201160        }
    11211161       
    11221162       
    11231163        template<typename T>
    1124         inline quaternion<T>                    operator - (quaternion<T> const & q)
     1164        BOOST_CONSTEXPR inline quaternion<T>    operator - (quaternion<T> const & q)
    11251165        {
    11261166            return(quaternion<T>(-q.R_component_1(),-q.R_component_2(),-q.R_component_3(),-q.R_component_4()));
    11271167        }
    11281168       
    11291169       
    11301170        template<typename T>
    1131         inline bool                                operator == (T const & lhs, quaternion<T> const & rhs)
     1171        BOOST_CONSTEXPR inline bool                operator == (T const & lhs, quaternion<T> const & rhs)
    11321172        {
    11331173            return    (
    11341174                        (rhs.R_component_1() == lhs)&&
     
    11401180       
    11411181       
    11421182        template<typename T>
    1143         inline bool                                operator == (quaternion<T> const & lhs, T const & rhs)
     1183        BOOST_CONSTEXPR inline bool                operator == (quaternion<T> const & lhs, T const & rhs)
    11441184        {
    11451185            return    (
    11461186                        (lhs.R_component_1() == rhs)&&
     
    11521192       
    11531193       
    11541194        template<typename T>
    1155         inline bool                                operator == (::std::complex<T> const & lhs, quaternion<T> const & rhs)
     1195        BOOST_CONSTEXPR inline bool                operator == (::std::complex<T> const & lhs, quaternion<T> const & rhs)
    11561196        {
    11571197            return    (
    11581198                        (rhs.R_component_1() == lhs.real())&&
     
    11641204       
    11651205       
    11661206        template<typename T>
    1167         inline bool                                operator == (quaternion<T> const & lhs, ::std::complex<T> const & rhs)
     1207        BOOST_CONSTEXPR inline bool                operator == (quaternion<T> const & lhs, ::std::complex<T> const & rhs)
    11681208        {
    11691209            return    (
    11701210                        (lhs.R_component_1() == rhs.real())&&
     
    11761216       
    11771217       
    11781218        template<typename T>
    1179         inline bool                                operator == (quaternion<T> const & lhs, quaternion<T> const & rhs)
     1219        BOOST_CONSTEXPR inline bool                operator == (quaternion<T> const & lhs, quaternion<T> const & rhs)
    11801220        {
    11811221            return    (
    11821222                        (rhs.R_component_1() == lhs.R_component_1())&&
     
    11931233        }
    11941234       
    11951235        template<typename T>
    1196         inline bool                                operator != (T const & lhs, quaternion<T> const & rhs)
     1236        BOOST_CONSTEXPR inline bool                operator != (T const & lhs, quaternion<T> const & rhs)
    11971237        BOOST_QUATERNION_NOT_EQUAL_GENERATOR
    11981238       
    11991239        template<typename T>
    1200         inline bool                                operator != (quaternion<T> const & lhs, T const & rhs)
     1240        BOOST_CONSTEXPR inline bool                operator != (quaternion<T> const & lhs, T const & rhs)
    12011241        BOOST_QUATERNION_NOT_EQUAL_GENERATOR
    12021242       
    12031243        template<typename T>
    1204         inline bool                                operator != (::std::complex<T> const & lhs, quaternion<T> const & rhs)
     1244        BOOST_CONSTEXPR inline bool                operator != (::std::complex<T> const & lhs, quaternion<T> const & rhs)
    12051245        BOOST_QUATERNION_NOT_EQUAL_GENERATOR
    12061246       
    12071247        template<typename T>
    1208         inline bool                                operator != (quaternion<T> const & lhs, ::std::complex<T> const & rhs)
     1248        BOOST_CONSTEXPR inline bool                operator != (quaternion<T> const & lhs, ::std::complex<T> const & rhs)
    12091249        BOOST_QUATERNION_NOT_EQUAL_GENERATOR
    12101250       
    12111251        template<typename T>
    1212         inline bool                                operator != (quaternion<T> const & lhs, quaternion<T> const & rhs)
     1252        BOOST_CONSTEXPR inline bool                operator != (quaternion<T> const & lhs, quaternion<T> const & rhs)
    12131253        BOOST_QUATERNION_NOT_EQUAL_GENERATOR
    12141254       
    12151255#undef    BOOST_QUATERNION_NOT_EQUAL_GENERATOR
     
    15541594        // values
    15551595       
    15561596        template<typename T>
    1557         inline T                                real(quaternion<T> const & q)
     1597        BOOST_CONSTEXPR inline T                real(quaternion<T> const & q)
    15581598        {
    15591599            return(q.real());
    15601600        }
    15611601       
    15621602       
    15631603        template<typename T>
    1564         inline quaternion<T>                    unreal(quaternion<T> const & q)
     1604        BOOST_CONSTEXPR inline quaternion<T>    unreal(quaternion<T> const & q)
    15651605        {
    15661606            return(q.unreal());
    15671607        }
     
    16511691#undef    BOOST_QUATERNION_VALARRAY_LOADER
    16521692       
    16531693       
    1654         // Note:    This is the Cayley norm, not the Euclidian norm...
    1655        
    16561694        template<typename T>
    1657         inline T                                norm(quaternion<T>const & q)
     1695        BOOST_CONSTEXPR inline quaternion<T>    conj(quaternion<T> const & q)
    16581696        {
    1659             return(real(q*conj(q)));
     1697            return(quaternion<T>(   +q.R_component_1(),
     1698                                    -q.R_component_2(),
     1699                                    -q.R_component_3(),
     1700                                    -q.R_component_4()));
    16601701        }
    16611702       
    16621703       
     1704        // Note:    This is the Cayley norm, not the Euclidian norm...
     1705       
    16631706        template<typename T>
    1664         inline quaternion<T>                    conj(quaternion<T> const & q)
     1707        BOOST_CONSTEXPR inline T                norm(quaternion<T>const & q)
    16651708        {
    1666             return(quaternion<T>(   +q.R_component_1(),
    1667                                     -q.R_component_2(),
    1668                                     -q.R_component_3(),
    1669                                     -q.R_component_4()));
     1709            return(real(q*conj(q)));
    16701710        }
    16711711       
    16721712       
     
    18941934                return(pow(quaternion<T>(static_cast<T>(1))/q,-n));
    18951935            }
    18961936        }
    1897        
    1898        
    1899         // helper templates for converting copy constructors (definition)
    1900        
    1901         namespace detail
    1902         {
    1903            
    1904             template<   typename T,
    1905                         typename U
    1906                     >
    1907             quaternion<T>    quaternion_type_converter(quaternion<U> const & rhs)
    1908             {
    1909                 return(quaternion<T>(   static_cast<T>(rhs.R_component_1()),
    1910                                         static_cast<T>(rhs.R_component_2()),
    1911                                         static_cast<T>(rhs.R_component_3()),
    1912                                         static_cast<T>(rhs.R_component_4())));
    1913             }
    1914         }
    19151937    }
    19161938}
    19171939
  • libs/math/doc/quaternion/math-quaternion.qbk

     
    120120   template<typename T> quaternion<T> ``[link boost_quaternions.quaternions.non_mem.binary_division_operators operator /]`` (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
    121121   template<typename T> quaternion<T> ``[link boost_quaternions.quaternions.non_mem.binary_division_operators operator /]`` (quaternion<T> const & lhs, quaternion<T> const & rhs);
    122122
    123    template<typename T> quaternion<T> ``[link boost_quaternions.quaternions.non_mem.unary_plus operator +]`` (quaternion<T> const & q);
    124    template<typename T> quaternion<T> ``[link boost_quaternions.quaternions.non_mem.unary_minus operator -]`` (quaternion<T> const & q);
     123   template<typename T> constexpr quaternion<T> ``[link boost_quaternions.quaternions.non_mem.unary_plus operator +]`` (quaternion<T> const & q);
     124   template<typename T> constexpr quaternion<T> ``[link boost_quaternions.quaternions.non_mem.unary_minus operator -]`` (quaternion<T> const & q);
    125125
    126    template<typename T> bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (T const & lhs, quaternion<T> const & rhs);
    127    template<typename T> bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (quaternion<T> const & lhs, T const & rhs);
    128    template<typename T> bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (::std::complex<T> const & lhs, quaternion<T> const & rhs);
    129    template<typename T> bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
    130    template<typename T> bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (quaternion<T> const & lhs, quaternion<T> const & rhs);
     126   template<typename T> constexpr bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (T const & lhs, quaternion<T> const & rhs);
     127   template<typename T> constexpr bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (quaternion<T> const & lhs, T const & rhs);
     128   template<typename T> constexpr bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (::std::complex<T> const & lhs, quaternion<T> const & rhs);
     129   template<typename T> constexpr bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
     130   template<typename T> constexpr bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (quaternion<T> const & lhs, quaternion<T> const & rhs);
    131131
    132    template<typename T> bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (T const & lhs, quaternion<T> const & rhs);
    133    template<typename T> bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (quaternion<T> const & lhs, T const & rhs);
    134    template<typename T> bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (::std::complex<T> const & lhs, quaternion<T> const & rhs);
    135    template<typename T> bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
    136    template<typename T> bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (quaternion<T> const & lhs, quaternion<T> const & rhs);
     132   template<typename T> constexpr bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (T const & lhs, quaternion<T> const & rhs);
     133   template<typename T> constexpr bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (quaternion<T> const & lhs, T const & rhs);
     134   template<typename T> constexpr bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (::std::complex<T> const & lhs, quaternion<T> const & rhs);
     135   template<typename T> constexpr bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (quaternion<T> const & lhs, ::std::complex<T> const & rhs);
     136   template<typename T> constexpr bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (quaternion<T> const & lhs, quaternion<T> const & rhs);
    137137
    138138   template<typename T, typename charT, class traits>
    139139   ::std::basic_istream<charT,traits>& ``[link boost_quaternions.quaternions.non_mem.stream_extractor operator >>]`` (::std::basic_istream<charT,traits> & is, quaternion<T> & q);
     
    142142   ::std::basic_ostream<charT,traits>& operator ``[link boost_quaternions.quaternions.non_mem.stream_inserter operator <<]`` (::std::basic_ostream<charT,traits> & os, quaternion<T> const & q);
    143143
    144144   // values
    145    template<typename T> T              ``[link boost_quaternions.quaternions.value_op.real_and_unreal real]``(quaternion<T> const & q);
    146    template<typename T> quaternion<T>  ``[link boost_quaternions.quaternions.value_op.real_and_unreal unreal]``(quaternion<T> const & q);
     145   template<typename T> constexpr T              ``[link boost_quaternions.quaternions.value_op.real_and_unreal real]``(quaternion<T> const & q);
     146   template<typename T> constexpr quaternion<T>  ``[link boost_quaternions.quaternions.value_op.real_and_unreal unreal]``(quaternion<T> const & q);
    147147
    148148   template<typename T> T              ``[link boost_quaternions.quaternions.value_op.sup sup]``(quaternion<T> const & q);
    149149   template<typename T> T              ``[link boost_quaternions.quaternions.value_op.l1 l1]``(quaternion<T> const & q);
    150150   template<typename T> T              ``[link boost_quaternions.quaternions.value_op.abs abs]``(quaternion<T> const & q);
    151    template<typename T> T              ``[link boost_quaternions.quaternions.value_op.norm norm]``(quaternion<T>const  & q);
    152    template<typename T> quaternion<T>  ``[link boost_quaternions.quaternions.value_op.conj conj]``(quaternion<T> const & q);
     151   template<typename T> /*constexpr*/ T              ``[link boost_quaternions.quaternions.value_op.norm norm]``(quaternion<T>const  & q);
     152   template<typename T> constexpr quaternion<T>  ``[link boost_quaternions.quaternions.value_op.conj conj]``(quaternion<T> const & q);
    153153
    154154   template<typename T> quaternion<T>  ``[link boost_quaternions.quaternions.creation_spherical spherical]``(T const & rho, T const & theta, T const & phi1, T const & phi2);
    155155   template<typename T> quaternion<T>  ``[link boost_quaternions.quaternions.creation_semipolar semipolar]``(T const & rho, T const & alpha, T const & theta1, T const & theta2);
     
    183183
    184184      typedef T ``[link boost_quaternions.quaternions.mem_typedef value_type]``;
    185185
    186       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T());
    187       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex<T> const & z0, ::std::complex<T> const & z1 = ::std::complex<T>());
     186      constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T());
     187      constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex<T> const & z0, ::std::complex<T> const & z1 = ::std::complex<T>());
    188188      template<typename X>
    189       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<X> const & a_recopier);
     189      constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<X> const & a_recopier);
    190190
    191       T                  ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const;
    192       quaternion<T>      ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const;
    193       T                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const;
    194       T                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const;
    195       T                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const;
    196       T                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const;
    197       ::std::complex<T>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const;
    198       ::std::complex<T>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const;
     191      constexpr T                  ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const;
     192      constexpr quaternion<T>      ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const;
     193      constexpr T                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const;
     194      constexpr T                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const;
     195      constexpr T                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const;
     196      constexpr T                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const;
     197      constexpr ::std::complex<T>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const;
     198      constexpr ::std::complex<T>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const;
    199199
    200200      quaternion<T>&     ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(quaternion<T> const  & a_affecter);
    201201      template<typename X>     
     
    239239   public:
    240240      typedef float ``[link boost_quaternions.quaternions.mem_typedef value_type]``;
    241241       
    242       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(float const & requested_a = 0.0f, float const & requested_b = 0.0f, float const & requested_c = 0.0f, float const & requested_d = 0.0f);
    243       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex<float> const & z0, ::std::complex<float> const & z1 = ::std::complex<float>());
    244       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<double> const & a_recopier);
    245       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<long double> const & a_recopier);
     242      constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(float const & requested_a = 0.0f, float const & requested_b = 0.0f, float const & requested_c = 0.0f, float const & requested_d = 0.0f) noexcept;
     243      constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex<float> const & z0, ::std::complex<float> const & z1 = ::std::complex<float>()) noexcept;
     244      constexpr explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<double> const & a_recopier) noexcept;
     245      constexpr explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<long double> const & a_recopier) noexcept;
    246246       
    247       float                  ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const;
    248       quaternion<float>      ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const;
    249       float                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const;
    250       float                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const;
    251       float                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const;
    252       float                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const;
    253       ::std::complex<float>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const;
    254       ::std::complex<float>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const;
     247      constexpr float                  ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const;
     248      constexpr quaternion<float>      ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const;
     249      constexpr float                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const;
     250      constexpr float                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const;
     251      constexpr float                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const;
     252      constexpr float                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const;
     253      constexpr ::std::complex<float>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const;
     254      constexpr ::std::complex<float>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const;
    255255
    256256      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(quaternion<float> const  & a_affecter);
    257257      template<typename X>     
     
    259259      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(float const  & a_affecter);
    260260      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(::std::complex<float> const & a_affecter);
    261261
    262       quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(float const & rhs);
    263       quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(::std::complex<float> const & rhs);
     262      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(float const & rhs) noexcept;
     263      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(::std::complex<float> const & rhs) noexcept;
    264264      template<typename X>
    265265      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(quaternion<X> const & rhs);
    266266
    267       quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(float const & rhs);
    268       quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(::std::complex<float> const & rhs);
     267      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(float const & rhs) noexcept;
     268      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(::std::complex<float> const & rhs) noexcept;
    269269      template<typename X>
    270270      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(quaternion<X> const & rhs);
    271271
    272       quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(float const & rhs);
    273       quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(::std::complex<float> const & rhs);
     272      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(float const & rhs) noexcept;
     273      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(::std::complex<float> const & rhs) noexcept;
    274274      template<typename X>
    275275      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(quaternion<X> const & rhs);
    276276
    277       quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(float const & rhs);
     277      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(float const & rhs) noexcept;
    278278      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(::std::complex<float> const & rhs);
    279279      template<typename X>
    280280      quaternion<float>&     ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(quaternion<X> const & rhs);
     
    288288   public:
    289289      typedef double ``[link boost_quaternions.quaternions.mem_typedef value_type]``;
    290290       
    291       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(double const & requested_a = 0.0, double const & requested_b = 0.0, double const & requested_c = 0.0, double const & requested_d = 0.0);
    292       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex<double> const & z0, ::std::complex<double> const & z1 = ::std::complex<double>());
    293       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<float> const & a_recopier);
    294       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<long double> const & a_recopier);
     291      constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(double const & requested_a = 0.0, double const & requested_b = 0.0, double const & requested_c = 0.0, double const & requested_d = 0.0) noexcept;
     292      constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex<double> const & z0, ::std::complex<double> const & z1 = ::std::complex<double>()) noexcept;
     293      constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<float> const & a_recopier) noexcept;
     294      constexpr explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<long double> const & a_recopier) noexcept;
    295295       
    296       double                  ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const;
    297       quaternion<double>      ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const;
    298       double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const;
    299       double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const;
    300       double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const;
    301       double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const;
    302       ::std::complex<double>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const;
    303       ::std::complex<double>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const;
     296      constexpr double                  ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const;
     297      constexpr quaternion<double>      ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const;
     298      constexpr double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const;
     299      constexpr double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const;
     300      constexpr double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const;
     301      constexpr double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const;
     302      constexpr ::std::complex<double>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const;
     303      constexpr ::std::complex<double>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const;
    304304
    305305      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(quaternion<double> const  & a_affecter);
    306306      template<typename X>     
     
    308308      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(double const  & a_affecter);
    309309      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(::std::complex<double> const & a_affecter);
    310310
    311       quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(double const & rhs);
    312       quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(::std::complex<double> const & rhs);
     311      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(double const & rhs) noexcept;
     312      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(::std::complex<double> const & rhs) noexcept;
    313313      template<typename X>
    314314      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(quaternion<X> const & rhs);
    315315
    316       quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(double const & rhs);
    317       quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(::std::complex<double> const & rhs);
     316      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(double const & rhs) noexcept;
     317      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(::std::complex<double> const & rhs) noexcept;
    318318      template<typename X>
    319319      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(quaternion<X> const & rhs);
    320320
    321       quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(double const & rhs);
    322       quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(::std::complex<double> const & rhs);
     321      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(double const & rhs) noexcept;
     322      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(::std::complex<double> const & rhs) noexcept;
    323323      template<typename X>
    324324      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(quaternion<X> const & rhs);
    325325
    326       quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(double const & rhs);
     326      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(double const & rhs) noexcept;
    327327      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(::std::complex<double> const & rhs);
    328328      template<typename X>
    329329      quaternion<double>&     ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(quaternion<X> const & rhs);
     
    337337   public:
    338338      typedef long double ``[link boost_quaternions.quaternions.mem_typedef value_type]``;
    339339       
    340       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(long double const & requested_a = 0.0L, long double const & requested_b = 0.0L, long double const & requested_c = 0.0L, long double const & requested_d = 0.0L);
    341       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex<long double> const & z0, ::std::complex<long double> const & z1 = ::std::complex<long double>());
    342       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<float> const & a_recopier);
    343       explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<double> const & a_recopier);
     340      constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(long double const & requested_a = 0.0L, long double const & requested_b = 0.0L, long double const & requested_c = 0.0L, long double const & requested_d = 0.0L) noexcept;
     341      constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex<long double> const & z0, ::std::complex<long double> const & z1 = ::std::complex<long double>()) noexcept;
     342      constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<float> const & a_recopier) noexcept;
     343      constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion<double> const & a_recopier) noexcept;
    344344       
    345       long double                  ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const;
    346       quaternion<long double>      ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const;
    347       long double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const;
    348       long double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const;
    349       long double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const;
    350       long double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const;
    351       ::std::complex<long double>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const;
    352       ::std::complex<long double>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const;
     345      constexpr long double                  ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const;
     346      constexpr quaternion<long double>      ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const;
     347      constexpr long double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const;
     348      constexpr long double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const;
     349      constexpr long double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const;
     350      constexpr long double                  ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const;
     351      constexpr ::std::complex<long double>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const;
     352      constexpr ::std::complex<long double>  ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const;
    353353
    354354      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(quaternion<long double> const  & a_affecter);
    355355      template<typename X>     
     
    357357      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(long double const  & a_affecter);
    358358      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(::std::complex<long double> const & a_affecter);
    359359
    360       quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(long double const & rhs);
    361       quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(::std::complex<long double> const & rhs);
     360      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(long double const & rhs) noexcept;
     361      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(::std::complex<long double> const & rhs) noexcept;
    362362      template<typename X>
    363363      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(quaternion<X> const & rhs);
    364364
    365       quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(long double const & rhs);
    366       quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(::std::complex<long double> const & rhs);
     365      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(long double const & rhs) noexcept;
     366      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(::std::complex<long double> const & rhs) noexcept;
    367367      template<typename X>
    368368      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(quaternion<X> const & rhs);
    369369
    370       quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(long double const & rhs);
    371       quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(::std::complex<long double> const & rhs);
     370      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(long double const & rhs) noexcept;
     371      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(::std::complex<long double> const & rhs) noexcept;
    372372      template<typename X>
    373373      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(quaternion<X> const & rhs);
    374374
    375       quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(long double const & rhs);
     375      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(long double const & rhs) noexcept;
    376376      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(::std::complex<long double> const & rhs);
    377377      template<typename X>
    378378      quaternion<long double>&     ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(quaternion<X> const & rhs);
     
    412412
    413413Template version:
    414414
    415    explicit quaternion(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T());
    416    explicit quaternion(::std::complex<T> const & z0, ::std::complex<T> const & z1 = ::std::complex<T>());
     415   constexpr quaternion(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T());
     416   constexpr quaternion(::std::complex<T> const & z0, ::std::complex<T> const & z1 = ::std::complex<T>());
    417417   template<typename X>
    418    explicit quaternion(quaternion<X> const & a_recopier);
     418   constexpr quaternion(quaternion<X> const & a_recopier);
    419419
    420420Float specialization version:
    421421
    422    explicit quaternion(float const & requested_a = 0.0f, float const & requested_b = 0.0f, float const & requested_c = 0.0f, float const & requested_d = 0.0f);
    423    explicit quaternion(::std::complex<float> const & z0,::std::complex<float> const & z1 = ::std::complex<float>());
    424    explicit quaternion(quaternion<double> const & a_recopier);
    425    explicit quaternion(quaternion<long double> const & a_recopier);
     422   constexpr quaternion(float const & requested_a = 0.0f, float const & requested_b = 0.0f, float const & requested_c = 0.0f, float const & requested_d = 0.0f) noexcept;
     423   constexpr quaternion(::std::complex<float> const & z0,::std::complex<float> const & z1 = ::std::complex<float>()) noexcept;
     424   constexpr explicit quaternion(quaternion<double> const & a_recopier) noexcept;
     425   constexpr explicit quaternion(quaternion<long double> const & a_recopier) noexcept;
    426426
    427427Double specialization version:
    428428
    429    explicit quaternion(double const & requested_a = 0.0, double const & requested_b = 0.0, double const & requested_c = 0.0, double const & requested_d = 0.0);
    430    explicit quaternion(::std::complex<double> const & z0, ::std::complex<double> const & z1 = ::std::complex<double>());
    431    explicit quaternion(quaternion<float> const & a_recopier);
    432    explicit quaternion(quaternion<long double> const & a_recopier);
     429   constexpr quaternion(double const & requested_a = 0.0, double const & requested_b = 0.0, double const & requested_c = 0.0, double const & requested_d = 0.0) noexcept;
     430   constexpr quaternion(::std::complex<double> const & z0, ::std::complex<double> const & z1 = ::std::complex<double>()) noexcept;
     431   constexpr quaternion(quaternion<float> const & a_recopier) noexcept;
     432   constexpr explicit quaternion(quaternion<long double> const & a_recopier) noexcept;
    433433
    434434Long double specialization version:
    435435
    436    explicit quaternion(long double const & requested_a = 0.0L, long double const & requested_b = 0.0L, long double const & requested_c = 0.0L, long double const & requested_d = 0.0L);
    437    explicit quaternion( ::std::complex<long double> const & z0, ::std::complex<long double> const & z1 = ::std::complex<long double>());
    438    explicit quaternion(quaternion<float> const & a_recopier);
    439    explicit quaternion(quaternion<double> const & a_recopier);
     436   constexpr quaternion(long double const & requested_a = 0.0L, long double const & requested_b = 0.0L, long double const & requested_c = 0.0L, long double const & requested_d = 0.0L) noexcept;
     437   constexpr quaternion(        ::std::complex<long double> const & z0, ::std::complex<long double> const & z1 = ::std::complex<long double>()) noexcept;
     438   constexpr quaternion(quaternion<float> const & a_recopier) noexcept;
     439   constexpr quaternion(quaternion<double> const & a_recopier) noexcept;
    440440
    441441A default constructor is provided for each form, which initializes
    442442each component to the default values for their type
     
    450450constructors must not throw.
    451451
    452452Destructors and untemplated copy constructors (from the same type) are
    453 provided by the compiler. Converting copy constructors make use of a
    454 templated helper function in a "detail" subnamespace.
     453provided by the compiler.
    455454
    456455[h3 Other member functions]
    457456[h4 Real and Unreal Parts]
  • libs/math/doc/octonion/math-octonion.qbk

     
    121121   template<typename T> octonion<T> ``[link boost_octonions.octonions.non_mem.binary_division_operators operator /]`` (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
    122122   template<typename T> octonion<T> ``[link boost_octonions.octonions.non_mem.binary_division_operators operator /]`` (octonion<T> const & lhs, octonion<T> const & rhs);
    123123
    124    template<typename T> octonion<T> ``[link boost_octonions.octonions.non_mem.unary_plus_and_minus_operators operator +]`` (octonion<T> const & o);
    125    template<typename T> octonion<T> ``[link boost_octonions.octonions.non_mem.unary_plus_and_minus_operators operator -]`` (octonion<T> const & o);
     124   template<typename T> constexpr octonion<T> ``[link boost_octonions.octonions.non_mem.unary_plus_and_minus_operators operator +]`` (octonion<T> const & o);
     125   template<typename T> constexpr octonion<T> ``[link boost_octonions.octonions.non_mem.unary_plus_and_minus_operators operator -]`` (octonion<T> const & o);
    126126
    127    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (T const & lhs, octonion<T> const & rhs);
    128    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion<T> const & lhs, T const & rhs);
    129    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (::std::complex<T> const & lhs, octonion<T> const & rhs);
    130    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion<T> const & lhs, ::std::complex<T> const & rhs);
    131    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
    132    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
    133    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion<T> const & lhs, octonion<T> const & rhs);
     127   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (T const & lhs, octonion<T> const & rhs);
     128   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion<T> const & lhs, T const & rhs);
     129   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (::std::complex<T> const & lhs, octonion<T> const & rhs);
     130   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion<T> const & lhs, ::std::complex<T> const & rhs);
     131   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
     132   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
     133   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion<T> const & lhs, octonion<T> const & rhs);
    134134
    135    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (T const & lhs, octonion<T> const & rhs);
    136    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion<T> const & lhs, T const & rhs);
    137    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (::std::complex<T> const & lhs, octonion<T> const & rhs);
    138    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion<T> const & lhs, ::std::complex<T> const & rhs);
    139    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
    140    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
    141    template<typename T> bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion<T> const & lhs, octonion<T> const & rhs);
     135   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (T const & lhs, octonion<T> const & rhs);
     136   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion<T> const & lhs, T const & rhs);
     137   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (::std::complex<T> const & lhs, octonion<T> const & rhs);
     138   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion<T> const & lhs, ::std::complex<T> const & rhs);
     139   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs);
     140   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
     141   template<typename T> constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion<T> const & lhs, octonion<T> const & rhs);
    142142
    143143   template<typename T, typename charT, class traits>
    144144   ::std::basic_istream<charT,traits> & ``[link boost_octonions.octonions.non_mem.stream_extractor operator >>]`` (::std::basic_istream<charT,traits> & is, octonion<T> & o);
     
    148148
    149149   // values
    150150
    151    template<typename T> T           ``[link boost_octonions.octonions.octonion_value_operations.real_and_unreal real]``(octonion<T> const & o);
    152    template<typename T> octonion<T> ``[link boost_octonions.octonions.octonion_value_operations.real_and_unreal unreal]``(octonion<T> const & o);
     151   template<typename T> constexpr T           ``[link boost_octonions.octonions.octonion_value_operations.real_and_unreal real]``(octonion<T> const & o);
     152   template<typename T> constexpr octonion<T> ``[link boost_octonions.octonions.octonion_value_operations.real_and_unreal unreal]``(octonion<T> const & o);
    153153
    154154   template<typename T> T           ``[link boost_octonions.octonions.octonion_value_operations.sup sup]``(octonion<T> const & o);
    155155   template<typename T> T           ``[link boost_octonions.octonions.octonion_value_operations.l1 l1]``(octonion<T>const & o);
    156156   template<typename T> T           ``[link boost_octonions.octonions.octonion_value_operations.abs abs]``(octonion<T> const & o);
    157    template<typename T> T           ``[link boost_octonions.octonions.octonion_value_operations.norm norm]``(octonion<T>const  & o);
    158    template<typename T> octonion<T> ``[link boost_octonions.octonions.octonion_value_operations.conj conj]``(octonion<T> const & o);
     157   template<typename T> /*constexpr*/ T           ``[link boost_octonions.octonions.octonion_value_operations.norm norm]``(octonion<T>const  & o);
     158   template<typename T> constexpr octonion<T> ``[link boost_octonions.octonions.octonion_value_operations.conj conj]``(octonion<T> const & o);
    159159
    160160   template<typename T> octonion<T> ``[link boost_octonions.octonions.oct_create spherical]``(T const & rho, T const & theta, T const & phi1, T const & phi2, T const & phi3, T const & phi4, T const & phi5, T const & phi6);
    161161   template<typename T> octonion<T> ``[link boost_octonions.octonions.oct_create multipolar]``(T const & rho1, T const & theta1, T const & rho2, T const & theta2, T const & rho3, T const & theta3, T const & rho4, T const & theta4);
     
    187187   public:
    188188      typedef T value_type;
    189189
    190       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T(), T const & requested_e = T(), T const & requested_f = T(), T const & requested_g = T(), T const & requested_h = T());
    191       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::std::complex<T> const & z0, ::std::complex<T> const & z1 = ::std::complex<T>(), ::std::complex<T> const & z2 = ::std::complex<T>(), ::std::complex<T> const & z3 = ::std::complex<T>());
    192       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion<T> const & q0, ::boost::math::quaternion<T> const & q1 = ::boost::math::quaternion<T>());
     190      constexpr  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T(), T const & requested_e = T(), T const & requested_f = T(), T const & requested_g = T(), T const & requested_h = T());
     191      constexpr  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::std::complex<T> const & z0, ::std::complex<T> const & z1 = ::std::complex<T>(), ::std::complex<T> const & z2 = ::std::complex<T>(), ::std::complex<T> const & z3 = ::std::complex<T>());
     192      constexpr  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion<T> const & q0, ::boost::math::quaternion<T> const & q1 = ::boost::math::quaternion<T>());
    193193      template<typename X>
    194       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<X> const & a_recopier);
     194      constexpr  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<X> const & a_recopier);
    195195
    196       T                             ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const;
    197       octonion<T>                   ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const;
     196      constexpr T                             ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const;
     197      constexpr octonion<T>                   ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const;
    198198
    199       T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const;
    200       T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const;
    201       T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const;
    202       T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const;
    203       T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const;
    204       T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const;
    205       T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const;
    206       T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const;
     199      constexpr T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const;
     200      constexpr T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const;
     201      constexpr T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const;
     202      constexpr T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const;
     203      constexpr T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const;
     204      constexpr T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const;
     205      constexpr T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const;
     206      constexpr T                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const;
    207207
    208       ::std::complex<T>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const;
    209       ::std::complex<T>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const;
    210       ::std::complex<T>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const;
    211       ::std::complex<T>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const;
     208      constexpr ::std::complex<T>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const;
     209      constexpr ::std::complex<T>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const;
     210      constexpr ::std::complex<T>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const;
     211      constexpr ::std::complex<T>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const;
    212212
    213       ::boost::math::quaternion<T>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const;
    214       ::boost::math::quaternion<T>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const;
     213      constexpr ::boost::math::quaternion<T>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const;
     214      constexpr ::boost::math::quaternion<T>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const;
    215215
    216216      octonion<T> & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion<T> const  & a_affecter);
    217217      template<typename X>
     
    259259   public:
    260260      typedef float value_type;
    261261
    262       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(float const & requested_a = 0.0f, float const & requested_b = 0.0f, float const & requested_c = 0.0f, float const & requested_d = 0.0f, float const & requested_e = 0.0f, float const & requested_f = 0.0f, float const & requested_g = 0.0f, float const & requested_h = 0.0f);
    263       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::std::complex<float> const & z0, ::std::complex<float> const & z1 = ::std::complex<float>(), ::std::complex<float> const & z2 = ::std::complex<float>(), ::std::complex<float> const & z3 = ::std::complex<float>());
    264       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion<float> const & q0, ::boost::math::quaternion<float> const & q1 = ::boost::math::quaternion<float>());
    265       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<double> const & a_recopier);
    266       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<long double> const & a_recopier);
     262      constexpr  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(float const & requested_a = 0.0f, float const & requested_b = 0.0f, float const & requested_c = 0.0f, float const & requested_d = 0.0f, float const & requested_e = 0.0f, float const & requested_f = 0.0f, float const & requested_g = 0.0f, float const & requested_h = 0.0f) noexcept;
     263      constexpr  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::std::complex<float> const & z0, ::std::complex<float> const & z1 = ::std::complex<float>(), ::std::complex<float> const & z2 = ::std::complex<float>(), ::std::complex<float> const & z3 = ::std::complex<float>()) noexcept;
     264      constexpr  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion<float> const & q0, ::boost::math::quaternion<float> const & q1 = ::boost::math::quaternion<float>()) noexcept;
     265      constexpr explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<double> const & a_recopier) noexcept;
     266      constexpr explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<long double> const & a_recopier) noexcept;
    267267
    268       float                             ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const;
    269       octonion<float>                   ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const;
     268      constexpr float                             ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const ;
     269      constexpr octonion<float>                   ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const;
    270270
    271       float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const;
    272       float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const;
    273       float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const;
    274       float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const;
    275       float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const;
    276       float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const;
    277       float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const;
    278       float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const;
     271      constexpr float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const;
     272      constexpr float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const;
     273      constexpr float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const;
     274      constexpr float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const;
     275      constexpr float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const;
     276      constexpr float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const;
     277      constexpr float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const;
     278      constexpr float                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const;
    279279
    280       ::std::complex<float>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const;
    281       ::std::complex<float>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const;
    282       ::std::complex<float>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const;
    283       ::std::complex<float>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const;
     280      constexpr ::std::complex<float>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const;
     281      constexpr ::std::complex<float>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const;
     282      constexpr ::std::complex<float>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const;
     283      constexpr ::std::complex<float>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const;
    284284
    285       ::boost::math::quaternion<float>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const;
    286       ::boost::math::quaternion<float>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const;
     285      constexpr ::boost::math::quaternion<float>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const;
     286      constexpr ::boost::math::quaternion<float>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const;
    287287
    288288      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion<float> const  & a_affecter);
    289289      template<typename X>
     
    292292      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (::std::complex<float> const & a_affecter);
    293293      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (::boost::math::quaternion<float> const & a_affecter);
    294294
    295       octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (float const & rhs);
    296       octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex<float> const & rhs);
    297       octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion<float> const & rhs);
     295      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (float const & rhs) noexcept;
     296      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex<float> const & rhs) noexcept;
     297      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion<float> const & rhs) noexcept;
    298298      template<typename X>
    299299      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (octonion<X> const & rhs);
    300300
    301       octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (float const & rhs);
    302       octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex<float> const & rhs);
    303       octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion<float> const & rhs);
     301      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (float const & rhs) noexcept;
     302      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex<float> const & rhs) noexcept;
     303      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion<float> const & rhs) noexcept;
    304304      template<typename X>
    305305      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (octonion<X> const & rhs);
    306306
    307       octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (float const & rhs);
    308       octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex<float> const & rhs);
    309       octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion<float> const & rhs);
     307      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (float const & rhs) noexcept;
     308      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex<float> const & rhs) noexcept;
     309      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion<float> const & rhs) noexcept;
    310310      template<typename X>
    311311      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (octonion<X> const & rhs);
    312312
    313       octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (float const & rhs);
     313      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (float const & rhs) noexcept;
    314314      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (::std::complex<float> const & rhs);
    315315      octonion<float> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (::boost::math::quaternion<float> const & rhs);
    316316      template<typename X>
     
    325325   public:
    326326      typedef double value_type;
    327327
    328       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(double const & requested_a = 0.0, double const & requested_b = 0.0, double const & requested_c = 0.0, double const & requested_d = 0.0, double const & requested_e = 0.0, double const & requested_f = 0.0, double const & requested_g = 0.0, double const & requested_h = 0.0);
    329       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::std::complex<double> const & z0, ::std::complex<double> const & z1 = ::std::complex<double>(), ::std::complex<double> const & z2 = ::std::complex<double>(), ::std::complex<double> const & z3 = ::std::complex<double>());
    330       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion<double> const & q0, ::boost::math::quaternion<double> const & q1 = ::boost::math::quaternion<double>());
    331       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<float> const & a_recopier);
    332       explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<long double> const & a_recopier);
     328      constexpr  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(double const & requested_a = 0.0, double const & requested_b = 0.0, double const & requested_c = 0.0, double const & requested_d = 0.0, double const & requested_e = 0.0, double const & requested_f = 0.0, double const & requested_g = 0.0, double const & requested_h = 0.0) noexcept;
     329      constexpr  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::std::complex<double> const & z0, ::std::complex<double> const & z1 = ::std::complex<double>(), ::std::complex<double> const & z2 = ::std::complex<double>(), ::std::complex<double> const & z3 = ::std::complex<double>()) noexcept;
     330      constexpr  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion<double> const & q0, ::boost::math::quaternion<double> const & q1 = ::boost::math::quaternion<double>()) noexcept;
     331      constexpr  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<float> const & a_recopier) noexcept;
     332      constexpr explicit  ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<long double> const & a_recopier) noexcept;
    333333
    334       double                             ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const;
    335       octonion<double>                   ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const;
     334      constexpr double                             ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const;
     335      constexpr octonion<double>                   ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const;
    336336
    337       double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const;
    338       double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const;
    339       double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const;
    340       double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const;
    341       double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const;
    342       double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const;
    343       double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const;
    344       double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const;
     337      constexpr double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const;
     338      constexpr double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const;
     339      constexpr double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const;
     340      constexpr double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const;
     341      constexpr double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const;
     342      constexpr double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const;
     343      constexpr double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const;
     344      constexpr double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const;
    345345
    346       ::std::complex<double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const;
    347       ::std::complex<double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const;
    348       ::std::complex<double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const;
    349       ::std::complex<double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const;
     346      constexpr ::std::complex<double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const;
     347      constexpr ::std::complex<double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const;
     348      constexpr ::std::complex<double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const;
     349      constexpr ::std::complex<double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const;
    350350
    351       ::boost::math::quaternion<double>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const;
    352       ::boost::math::quaternion<double>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const;
     351      constexpr ::boost::math::quaternion<double>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const;
     352      constexpr ::boost::math::quaternion<double>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const;
    353353
    354354      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion<double> const  & a_affecter);
    355355      template<typename X>
     
    358358      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (::std::complex<double> const & a_affecter);
    359359      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (::boost::math::quaternion<double> const & a_affecter);
    360360
    361       octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (double const & rhs);
    362       octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex<double> const & rhs);
    363       octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion<double> const & rhs);
     361      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (double const & rhs) noexcept;
     362      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex<double> const & rhs) noexcept;
     363      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion<double> const & rhs) noexcept;
    364364      template<typename X>
    365365      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (octonion<X> const & rhs);
    366366
    367       octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (double const & rhs);
    368       octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex<double> const & rhs);
    369       octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion<double> const & rhs);
     367      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (double const & rhs) noexcept;
     368      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex<double> const & rhs) noexcept;
     369      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion<double> const & rhs) noexcept;
    370370      template<typename X>
    371371      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (octonion<X> const & rhs);
    372372
    373       octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (double const & rhs);
    374       octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex<double> const & rhs);
    375       octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion<double> const & rhs);
     373      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (double const & rhs) noexcept;
     374      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex<double> const & rhs) noexcept;
     375      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion<double> const & rhs) noexcept;
    376376      template<typename X>
    377377      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (octonion<X> const & rhs);
    378378
    379       octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (double const & rhs);
     379      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (double const & rhs) noexcept;
    380380      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (::std::complex<double> const & rhs);
    381381      octonion<double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (::boost::math::quaternion<double> const & rhs);
    382382      template<typename X>
     
    391391   public:
    392392      typedef long double value_type;
    393393
    394       explicit   ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(long double const & requested_a = 0.0L, long double const & requested_b = 0.0L, long double const & requested_c = 0.0L, long double const & requested_d = 0.0L, long double const & requested_e = 0.0L, long double const & requested_f = 0.0L, long double const & requested_g = 0.0L, long double const & requested_h = 0.0L);
    395       explicit   ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``( ::std::complex<long double> const & z0, ::std::complex<long double> const & z1 = ::std::complex<long double>(), ::std::complex<long double> const & z2 = ::std::complex<long double>(), ::std::complex<long double> const & z3 = ::std::complex<long double>());
    396       explicit   ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``( ::boost::math::quaternion<long double> const & q0, ::boost::math::quaternion<long double> const & z1 = ::boost::math::quaternion<long double>());
    397       explicit   ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<float> const & a_recopier);
    398       explicit   ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<double> const & a_recopier);
     394      constexpr   ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(long double const & requested_a = 0.0L, long double const & requested_b = 0.0L, long double const & requested_c = 0.0L, long double const & requested_d = 0.0L, long double const & requested_e = 0.0L, long double const & requested_f = 0.0L, long double const & requested_g = 0.0L, long double const & requested_h = 0.0L) noexcept;
     395      constexpr   ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``( ::std::complex<long double> const & z0, ::std::complex<long double> const & z1 = ::std::complex<long double>(), ::std::complex<long double> const & z2 = ::std::complex<long double>(), ::std::complex<long double> const & z3 = ::std::complex<long double>()) noexcept;
     396      constexpr   ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``( ::boost::math::quaternion<long double> const & q0, ::boost::math::quaternion<long double> const & z1 = ::boost::math::quaternion<long double>()) noexcept;
     397      constexpr   ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<float> const & a_recopier) noexcept;
     398      constexpr   ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion<double> const & a_recopier) noexcept;
    399399
    400       long double                             ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const;
    401       octonion<long double>                   ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const;
     400      constexpr long double                             ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const;
     401      constexpr octonion<long double>                   ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const;
    402402
    403       long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const;
    404       long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const;
    405       long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const;
    406       long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const;
    407       long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const;
    408       long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const;
    409       long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const;
    410       long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const;
     403      constexpr long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const;
     404      constexpr long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const;
     405      constexpr long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const;
     406      constexpr long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const;
     407      constexpr long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const;
     408      constexpr long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const;
     409      constexpr long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const;
     410      constexpr long double                             ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const;
    411411
    412       ::std::complex<long double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const;
    413       ::std::complex<long double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const;
    414       ::std::complex<long double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const;
    415       ::std::complex<long double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const;
     412      constexpr ::std::complex<long double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const;
     413      constexpr ::std::complex<long double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const;
     414      constexpr ::std::complex<long double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const;
     415      constexpr ::std::complex<long double>             ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const;
    416416
    417       ::boost::math::quaternion<long double>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const;
    418       ::boost::math::quaternion<long double>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const;
     417      constexpr ::boost::math::quaternion<long double>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const;
     418      constexpr ::boost::math::quaternion<long double>  ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const;
    419419
    420420      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion<long double> const  & a_affecter);
    421421      template<typename X>
     
    424424      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (::std::complex<long double> const & a_affecter);
    425425      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (::boost::math::quaternion<long double> const & a_affecter);
    426426
    427       octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (long double const & rhs);
    428       octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex<long double> const & rhs);
    429       octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion<long double> const & rhs);
     427      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (long double const & rhs) noexcept;
     428      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex<long double> const & rhs) noexcept;
     429      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion<long double> const & rhs) noexcept;
    430430      template<typename X>
    431431      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (octonion<X> const & rhs);
    432432
    433       octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (long double const & rhs);
    434       octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex<long double> const & rhs);
    435       octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion<long double> const & rhs);
     433      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (long double const & rhs) noexcept;
     434      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex<long double> const & rhs) noexcept;
     435      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion<long double> const & rhs) noexcept;
    436436      template<typename X>
    437437      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (octonion<X> const & rhs);
    438438
    439       octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (long double const & rhs);
    440       octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex<long double> const & rhs);
    441       octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion<long double> const & rhs);
     439      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (long double const & rhs) noexcept;
     440      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex<long double> const & rhs) noexcept;
     441      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion<long double> const & rhs) noexcept;
    442442      template<typename X>
    443443      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (octonion<X> const & rhs);
    444444
    445       octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (long double const & rhs);
     445      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (long double const & rhs) noexcept;
    446446      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (::std::complex<long double> const & rhs);
    447447      octonion<long double> & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (::boost::math::quaternion<long double> const & rhs);
    448448      template<typename X>
     
    483483
    484484Template version:
    485485
    486    explicit  octonion(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T(), T const & requested_e = T(), T const & requested_f = T(), T const & requested_g = T(), T const & requested_h = T());
    487    explicit  octonion(::std::complex<T> const & z0, ::std::complex<T> const & z1 = ::std::complex<T>(), ::std::complex<T> const & z2 = ::std::complex<T>(), ::std::complex<T> const & z3 = ::std::complex<T>());
    488    explicit  octonion(::boost::math::quaternion<T> const & q0, ::boost::math::quaternion<T> const & q1 = ::boost::math::quaternion<T>());
     486   constexpr  octonion(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T(), T const & requested_e = T(), T const & requested_f = T(), T const & requested_g = T(), T const & requested_h = T());
     487   constexpr  octonion(::std::complex<T> const & z0, ::std::complex<T> const & z1 = ::std::complex<T>(), ::std::complex<T> const & z2 = ::std::complex<T>(), ::std::complex<T> const & z3 = ::std::complex<T>());
     488   constexpr  octonion(::boost::math::quaternion<T> const & q0, ::boost::math::quaternion<T> const & q1 = ::boost::math::quaternion<T>());
    489489   template<typename X>
    490    explicit octonion(octonion<X> const & a_recopier);
     490   constexpr octonion(octonion<X> const & a_recopier);
    491491
    492492Float specialization version:
    493493
    494    explicit  octonion(float const & requested_a = 0.0f, float const & requested_b = 0.0f, float const & requested_c = 0.0f, float const & requested_d = 0.0f, float const & requested_e = 0.0f, float const & requested_f = 0.0f, float const & requested_g = 0.0f, float const & requested_h = 0.0f);
    495    explicit  octonion(::std::complex<float> const & z0, ::std::complex<float> const & z1 = ::std::complex<float>(), ::std::complex<float> const & z2 = ::std::complex<float>(), ::std::complex<float> const & z3 = ::std::complex<float>());
    496    explicit  octonion(::boost::math::quaternion<float> const & q0, ::boost::math::quaternion<float> const & q1 = ::boost::math::quaternion<float>());
    497    explicit  octonion(octonion<double> const & a_recopier);
    498    explicit  octonion(octonion<long double> const & a_recopier);
     494   constexpr  octonion(float const & requested_a = 0.0f, float const & requested_b = 0.0f, float const & requested_c = 0.0f, float const & requested_d = 0.0f, float const & requested_e = 0.0f, float const & requested_f = 0.0f, float const & requested_g = 0.0f, float const & requested_h = 0.0f) noexcept;
     495   constexpr  octonion(::std::complex<float> const & z0, ::std::complex<float> const & z1 = ::std::complex<float>(), ::std::complex<float> const & z2 = ::std::complex<float>(), ::std::complex<float> const & z3 = ::std::complex<float>()) noexcept;
     496   constexpr  octonion(::boost::math::quaternion<float> const & q0, ::boost::math::quaternion<float> const & q1 = ::boost::math::quaternion<float>()) noexcept;
     497   constexpr explicit  octonion(octonion<double> const & a_recopier) noexcept;
     498   constexpr explicit  octonion(octonion<long double> const & a_recopier) noexcept;
    499499
    500500Double specialization version:
    501501
    502    explicit  octonion(double const & requested_a = 0.0, double const & requested_b = 0.0, double const & requested_c = 0.0, double const & requested_d = 0.0, double const & requested_e = 0.0, double const & requested_f = 0.0, double const & requested_g = 0.0, double const & requested_h = 0.0);
    503    explicit  octonion(::std::complex<double> const & z0, ::std::complex<double> const & z1 = ::std::complex<double>(), ::std::complex<double> const & z2 = ::std::complex<double>(), ::std::complex<double> const & z3 = ::std::complex<double>());
    504    explicit  octonion(::boost::math::quaternion<double> const & q0, ::boost::math::quaternion<double> const & q1 = ::boost::math::quaternion<double>());
    505    explicit  octonion(octonion<float> const & a_recopier);
    506    explicit  octonion(octonion<long double> const & a_recopier);
     502   constexpr  octonion(double const & requested_a = 0.0, double const & requested_b = 0.0, double const & requested_c = 0.0, double const & requested_d = 0.0, double const & requested_e = 0.0, double const & requested_f = 0.0, double const & requested_g = 0.0, double const & requested_h = 0.0) noexcept;
     503   constexpr  octonion(::std::complex<double> const & z0, ::std::complex<double> const & z1 = ::std::complex<double>(), ::std::complex<double> const & z2 = ::std::complex<double>(), ::std::complex<double> const & z3 = ::std::complex<double>()) noexcept;
     504   constexpr  octonion(::boost::math::quaternion<double> const & q0, ::boost::math::quaternion<double> const & q1 = ::boost::math::quaternion<double>()) noexcept;
     505   constexpr  octonion(octonion<float> const & a_recopier) noexcept;
     506   constexpr explicit  octonion(octonion<long double> const & a_recopier) noexcept;
    507507
    508508Long double specialization version:
    509509
    510    explicit  octonion(long double const & requested_a = 0.0L, long double const & requested_b = 0.0L, long double const & requested_c = 0.0L, long double const & requested_d = 0.0L, long double const & requested_e = 0.0L, long double const & requested_f = 0.0L, long double const & requested_g = 0.0L, long double const & requested_h = 0.0L);
    511    explicit  octonion( ::std::complex<long double> const & z0, ::std::complex<long double> const & z1 = ::std::complex<long double>(), ::std::complex<long double> const & z2 = ::std::complex<long double>(), ::std::complex<long double> const & z3 = ::std::complex<long double>());
    512    explicit  octonion(::boost::math::quaternion<long double> const & q0, ::boost::math::quaternion<long double> const & q1 = ::boost::math::quaternion<long double>());
    513    explicit  octonion(octonion<float> const & a_recopier);
    514    explicit  octonion(octonion<double> const & a_recopier);
     510   constexpr  octonion(long double const & requested_a = 0.0L, long double const & requested_b = 0.0L, long double const & requested_c = 0.0L, long double const & requested_d = 0.0L, long double const & requested_e = 0.0L, long double const & requested_f = 0.0L, long double const & requested_g = 0.0L, long double const & requested_h = 0.0L) noexcept;
     511   constexpr  octonion( ::std::complex<long double> const & z0, ::std::complex<long double> const & z1 = ::std::complex<long double>(), ::std::complex<long double> const & z2 = ::std::complex<long double>(), ::std::complex<long double> const & z3 = ::std::complex<long double>()) noexcept;
     512   constexpr  octonion(::boost::math::quaternion<long double> const & q0, ::boost::math::quaternion<long double> const & q1 = ::boost::math::quaternion<long double>()) noexcept;
     513   constexpr  octonion(octonion<float> const & a_recopier) noexcept;
     514   constexpr  octonion(octonion<double> const & a_recopier) noexcept;
    515515
    516516A default constructor is provided for each form, which initializes each component
    517517to the default values for their type (i.e. zero for floating numbers).
     
    525525the base type's constructors must not throw.
    526526
    527527Destructors and untemplated copy constructors (from the same type)
    528 are provided by the compiler. Converting copy constructors make use
    529 of a templated helper function in a "detail" subnamespace.
     528are provided by the compiler.
    530529
    531530[h3 Other member functions]
    532531
     
    710709   template<typename T> octonion<T> operator / (octonion<T> const & lhs, octonion<T> const & rhs);
    711710
    712711These operators return `octonion<T>(lhs) /= rhs`. It is of course still an
    713 error to divide by zero...
     712error to divide by zero....
    714713
    715714[h4 Binary Equality Operators]
    716715
     
    722721   template<typename T> bool operator == (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs);
    723722   template<typename T> bool operator == (octonion<T> const & lhs, octonion<T> const & rhs);
    724723
    725 These return true if and only if the four components of `octonion<T>(lhs)`
     724These return true if and only if the eight components of `octonion<T>(lhs)`
    726725are equal to their counterparts in `octonion<T>(rhs)`. As with any
    727726floating-type entity, this is essentially meaningless.
    728727