Index: boost/math/octonion.hpp =================================================================== --- boost/math/octonion.hpp (revision 77075) +++ boost/math/octonion.hpp (working copy) @@ -37,82 +37,82 @@ #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ #define BOOST_OCTONION_ACCESSOR_GENERATOR(type) \ - type real() const \ + BOOST_CONSTEXPR type real() const \ { \ return(a); \ } \ \ - octonion unreal() const \ + BOOST_CONSTEXPR octonion unreal() const \ { \ return( octonion(static_cast(0),b,c,d,e,f,g,h)); \ } \ \ - type R_component_1() const \ + BOOST_CONSTEXPR type R_component_1() const \ { \ return(a); \ } \ \ - type R_component_2() const \ + BOOST_CONSTEXPR type R_component_2() const \ { \ return(b); \ } \ \ - type R_component_3() const \ + BOOST_CONSTEXPR type R_component_3() const \ { \ return(c); \ } \ \ - type R_component_4() const \ + BOOST_CONSTEXPR type R_component_4() const \ { \ return(d); \ } \ \ - type R_component_5() const \ + BOOST_CONSTEXPR type R_component_5() const \ { \ return(e); \ } \ \ - type R_component_6() const \ + BOOST_CONSTEXPR type R_component_6() const \ { \ return(f); \ } \ \ - type R_component_7() const \ + BOOST_CONSTEXPR type R_component_7() const \ { \ return(g); \ } \ \ - type R_component_8() const \ + BOOST_CONSTEXPR type R_component_8() const \ { \ return(h); \ } \ \ - ::std::complex C_component_1() const \ + BOOST_CONSTEXPR ::std::complex C_component_1() const \ { \ return(::std::complex(a,b)); \ } \ \ - ::std::complex C_component_2() const \ + BOOST_CONSTEXPR ::std::complex C_component_2() const \ { \ return(::std::complex(c,d)); \ } \ \ - ::std::complex C_component_3() const \ + BOOST_CONSTEXPR ::std::complex C_component_3() const \ { \ return(::std::complex(e,f)); \ } \ \ - ::std::complex C_component_4() const \ + BOOST_CONSTEXPR ::std::complex C_component_4() const \ { \ return(::std::complex(g,h)); \ } \ \ - ::boost::math::quaternion H_component_1() const \ + BOOST_CONSTEXPR ::boost::math::quaternion H_component_1() const \ { \ return(::boost::math::quaternion(a,b,c,d)); \ } \ \ - ::boost::math::quaternion H_component_2() const \ + BOOST_CONSTEXPR ::boost::math::quaternion H_component_2() const \ { \ return(::boost::math::quaternion(e,f,g,h)); \ } @@ -201,7 +201,7 @@ // constructor for O seen as R^8 // (also default constructor) - explicit octonion( T const & requested_a = T(), + BOOST_CONSTEXPR octonion( T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T(), @@ -224,7 +224,7 @@ // constructor for H seen as C^4 - explicit octonion( ::std::complex const & z0, + BOOST_CONSTEXPR octonion( ::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()) @@ -243,7 +243,7 @@ // constructor for O seen as H^2 - explicit octonion( ::boost::math::quaternion const & q0, + BOOST_CONSTEXPR octonion( ::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()) : a(q0.R_component_1()), b(q0.R_component_2()), @@ -265,7 +265,7 @@ // templated copy constructor template - explicit octonion(octonion const & a_recopier) + BOOST_CONSTEXPR octonion(octonion const & a_recopier) : a(static_cast(a_recopier.R_component_1())), b(static_cast(a_recopier.R_component_2())), c(static_cast(a_recopier.R_component_3())), @@ -683,23 +683,11 @@ template<> class octonion; - // helper templates for converting copy constructors (declaration) - - namespace detail - { - - template< typename T, - typename U - > - octonion octonion_type_converter(octonion const & rhs); - } - - // implementation of octonion specialization #define BOOST_OCTONION_CONSTRUCTOR_GENERATOR(type) \ - explicit octonion( type const & requested_a = static_cast(0), \ + BOOST_CONSTEXPR octonion( type const & requested_a = static_cast(0), \ type const & requested_b = static_cast(0), \ type const & requested_c = static_cast(0), \ type const & requested_d = static_cast(0), \ @@ -707,6 +695,7 @@ type const & requested_f = static_cast(0), \ type const & requested_g = static_cast(0), \ type const & requested_h = static_cast(0)) \ + BOOST_NOEXCEPT \ : a(requested_a), \ b(requested_b), \ c(requested_c), \ @@ -718,10 +707,11 @@ { \ } \ \ - explicit octonion( ::std::complex const & z0, \ + BOOST_CONSTEXPR octonion( ::std::complex const & z0, \ ::std::complex const & z1 = ::std::complex(), \ ::std::complex const & z2 = ::std::complex(), \ ::std::complex const & z3 = ::std::complex()) \ + BOOST_NOEXCEPT \ : a(z0.real()), \ b(z0.imag()), \ c(z1.real()), \ @@ -733,8 +723,9 @@ { \ } \ \ - explicit octonion( ::boost::math::quaternion const & q0, \ + BOOST_CONSTEXPR octonion( ::boost::math::quaternion const & q0, \ ::boost::math::quaternion const & q1 = ::boost::math::quaternion()) \ + BOOST_NOEXCEPT \ : a(q0.R_component_1()), \ b(q0.R_component_2()), \ c(q0.R_component_3()), \ @@ -749,6 +740,7 @@ #define BOOST_OCTONION_MEMBER_ADD_GENERATOR_1(type) \ octonion & operator += (type const & rhs) \ + BOOST_NOEXCEPT \ { \ a += rhs; \ \ @@ -757,6 +749,7 @@ #define BOOST_OCTONION_MEMBER_ADD_GENERATOR_2(type) \ octonion & operator += (::std::complex const & rhs) \ + BOOST_NOEXCEPT \ { \ a += rhs.real(); \ b += rhs.imag(); \ @@ -766,6 +759,7 @@ #define BOOST_OCTONION_MEMBER_ADD_GENERATOR_3(type) \ octonion & operator += (::boost::math::quaternion const & rhs) \ + BOOST_NOEXCEPT \ { \ a += rhs.R_component_1(); \ b += rhs.R_component_2(); \ @@ -793,6 +787,7 @@ #define BOOST_OCTONION_MEMBER_SUB_GENERATOR_1(type) \ octonion & operator -= (type const & rhs) \ + BOOST_NOEXCEPT \ { \ a -= rhs; \ \ @@ -801,6 +796,7 @@ #define BOOST_OCTONION_MEMBER_SUB_GENERATOR_2(type) \ octonion & operator -= (::std::complex const & rhs) \ + BOOST_NOEXCEPT \ { \ a -= rhs.real(); \ b -= rhs.imag(); \ @@ -810,6 +806,7 @@ #define BOOST_OCTONION_MEMBER_SUB_GENERATOR_3(type) \ octonion & operator -= (::boost::math::quaternion const & rhs) \ + BOOST_NOEXCEPT \ { \ a -= rhs.R_component_1(); \ b -= rhs.R_component_2(); \ @@ -837,6 +834,7 @@ #define BOOST_OCTONION_MEMBER_MUL_GENERATOR_1(type) \ octonion & operator *= (type const & rhs) \ + BOOST_NOEXCEPT \ { \ a *= rhs; \ b *= rhs; \ @@ -852,6 +850,7 @@ #define BOOST_OCTONION_MEMBER_MUL_GENERATOR_2(type) \ octonion & operator *= (::std::complex const & rhs) \ + BOOST_NOEXCEPT \ { \ type ar = rhs.real(); \ type br = rhs.imag(); \ @@ -879,6 +878,7 @@ #define BOOST_OCTONION_MEMBER_MUL_GENERATOR_3(type) \ octonion & operator *= (::boost::math::quaternion const & rhs) \ + BOOST_NOEXCEPT \ { \ type ar = rhs.R_component_1(); \ type br = rhs.R_component_2(); \ @@ -949,6 +949,7 @@ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_1(type) \ octonion & operator /= (type const & rhs) \ + BOOST_NOEXCEPT \ { \ a /= rhs; \ b /= rhs; \ @@ -1409,15 +1410,11 @@ // explicit copy constructors (precision-loosing converters) - explicit octonion(octonion const & a_recopier) - { - *this = detail::octonion_type_converter(a_recopier); - } + explicit BOOST_CONSTEXPR octonion(octonion const & a_recopier) + BOOST_NOEXCEPT ; - explicit octonion(octonion const & a_recopier) - { - *this = detail::octonion_type_converter(a_recopier); - } + explicit BOOST_CONSTEXPR octonion(octonion const & a_recopier) + BOOST_NOEXCEPT ; // destructor // (this is taken care of by the compiler itself) @@ -1471,17 +1468,24 @@ // converting copy constructor - explicit octonion(octonion const & a_recopier) + BOOST_CONSTEXPR octonion(octonion const & a_recopier) + BOOST_NOEXCEPT + : a(a_recopier.R_component_1()), + b(a_recopier.R_component_2()), + c(a_recopier.R_component_3()), + d(a_recopier.R_component_4()), + e(a_recopier.R_component_5()), + f(a_recopier.R_component_6()), + g(a_recopier.R_component_7()), + h(a_recopier.R_component_8()) { - *this = detail::octonion_type_converter(a_recopier); + // nothing to do! } // explicit copy constructors (precision-loosing converters) - explicit octonion(octonion const & a_recopier) - { - *this = detail::octonion_type_converter(a_recopier); - } + explicit BOOST_CONSTEXPR octonion(octonion const & a_recopier) + BOOST_NOEXCEPT ; // destructor // (this is taken care of by the compiler itself) @@ -1533,17 +1537,34 @@ // UNtemplated copy constructor // (this is taken care of by the compiler itself) - // converting copy constructor + // converting copy constructors - explicit octonion(octonion const & a_recopier) + BOOST_CONSTEXPR octonion(octonion const & a_recopier) + BOOST_NOEXCEPT + : a(a_recopier.R_component_1()), + b(a_recopier.R_component_2()), + c(a_recopier.R_component_3()), + d(a_recopier.R_component_4()), + e(a_recopier.R_component_5()), + f(a_recopier.R_component_6()), + g(a_recopier.R_component_7()), + h(a_recopier.R_component_8()) { - *this = detail::octonion_type_converter(a_recopier); + // nothing to do! } - - explicit octonion(octonion const & a_recopier) + BOOST_CONSTEXPR octonion(octonion const & a_recopier) + BOOST_NOEXCEPT + : a(a_recopier.R_component_1()), + b(a_recopier.R_component_2()), + c(a_recopier.R_component_3()), + d(a_recopier.R_component_4()), + e(a_recopier.R_component_5()), + f(a_recopier.R_component_6()), + g(a_recopier.R_component_7()), + h(a_recopier.R_component_8()) { - *this = detail::octonion_type_converter(a_recopier); + // nothing to do! } @@ -1585,6 +1606,52 @@ }; + BOOST_CONSTEXPR inline + octonion::octonion( octonion const &a_recopier ) + BOOST_NOEXCEPT + : a(static_cast(a_recopier.R_component_1())), + b(static_cast(a_recopier.R_component_2())), + c(static_cast(a_recopier.R_component_3())), + d(static_cast(a_recopier.R_component_4())), + e(static_cast(a_recopier.R_component_5())), + f(static_cast(a_recopier.R_component_6())), + g(static_cast(a_recopier.R_component_7())), + h(static_cast(a_recopier.R_component_8())) + { + //nothing to do! + } + + BOOST_CONSTEXPR inline + octonion::octonion( octonion const &a_recopier ) + BOOST_NOEXCEPT + : a(static_cast(a_recopier.R_component_1())), + b(static_cast(a_recopier.R_component_2())), + c(static_cast(a_recopier.R_component_3())), + d(static_cast(a_recopier.R_component_4())), + e(static_cast(a_recopier.R_component_5())), + f(static_cast(a_recopier.R_component_6())), + g(static_cast(a_recopier.R_component_7())), + h(static_cast(a_recopier.R_component_8())) + { + //nothing to do! + } + + BOOST_CONSTEXPR inline + octonion::octonion( octonion const &a_recopier ) + BOOST_NOEXCEPT + : a(static_cast(a_recopier.R_component_1())), + b(static_cast(a_recopier.R_component_2())), + c(static_cast(a_recopier.R_component_3())), + d(static_cast(a_recopier.R_component_4())), + e(static_cast(a_recopier.R_component_5())), + f(static_cast(a_recopier.R_component_6())), + g(static_cast(a_recopier.R_component_7())), + h(static_cast(a_recopier.R_component_8())) + { + //nothing to do! + } + + #undef BOOST_OCTONION_CONSTRUCTOR_GENERATOR #undef BOOST_OCTONION_MEMBER_ALGEBRAIC_GENERATOR @@ -1693,21 +1760,21 @@ template - inline octonion operator + (octonion const & o) + BOOST_CONSTEXPR inline octonion operator + (octonion const & o) { return(o); } template - inline octonion operator - (octonion const & o) + BOOST_CONSTEXPR inline octonion operator - (octonion const & o) { return(octonion(-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())); } template - inline bool operator == (T const & lhs, octonion const & rhs) + BOOST_CONSTEXPR inline bool operator == (T const & lhs, octonion const & rhs) { return( (rhs.R_component_1() == lhs)&& @@ -1723,7 +1790,7 @@ template - inline bool operator == (octonion const & lhs, T const & rhs) + BOOST_CONSTEXPR inline bool operator == (octonion const & lhs, T const & rhs) { return( (lhs.R_component_1() == rhs)&& @@ -1739,7 +1806,7 @@ template - inline bool operator == (::std::complex const & lhs, octonion const & rhs) + BOOST_CONSTEXPR inline bool operator == (::std::complex const & lhs, octonion const & rhs) { return( (rhs.R_component_1() == lhs.real())&& @@ -1755,7 +1822,7 @@ template - inline bool operator == (octonion const & lhs, ::std::complex const & rhs) + BOOST_CONSTEXPR inline bool operator == (octonion const & lhs, ::std::complex const & rhs) { return( (lhs.R_component_1() == rhs.real())&& @@ -1771,7 +1838,7 @@ template - inline bool operator == (::boost::math::quaternion const & lhs, octonion const & rhs) + BOOST_CONSTEXPR inline bool operator == (::boost::math::quaternion const & lhs, octonion const & rhs) { return( (rhs.R_component_1() == lhs.R_component_1())&& @@ -1787,7 +1854,7 @@ template - inline bool operator == (octonion const & lhs, ::boost::math::quaternion const & rhs) + BOOST_CONSTEXPR inline bool operator == (octonion const & lhs, ::boost::math::quaternion const & rhs) { return( (lhs.R_component_1() == rhs.R_component_1())&& @@ -1803,7 +1870,7 @@ template - inline bool operator == (octonion const & lhs, octonion const & rhs) + BOOST_CONSTEXPR inline bool operator == (octonion const & lhs, octonion const & rhs) { return( (rhs.R_component_1() == lhs.R_component_1())&& @@ -1824,31 +1891,31 @@ } template - inline bool operator != (T const & lhs, octonion const & rhs) + BOOST_CONSTEXPR inline bool operator != (T const & lhs, octonion const & rhs) BOOST_OCTONION_NOT_EQUAL_GENERATOR template - inline bool operator != (octonion const & lhs, T const & rhs) + BOOST_CONSTEXPR inline bool operator != (octonion const & lhs, T const & rhs) BOOST_OCTONION_NOT_EQUAL_GENERATOR template - inline bool operator != (::std::complex const & lhs, octonion const & rhs) + BOOST_CONSTEXPR inline bool operator != (::std::complex const & lhs, octonion const & rhs) BOOST_OCTONION_NOT_EQUAL_GENERATOR template - inline bool operator != (octonion const & lhs, ::std::complex const & rhs) + BOOST_CONSTEXPR inline bool operator != (octonion const & lhs, ::std::complex const & rhs) BOOST_OCTONION_NOT_EQUAL_GENERATOR template - inline bool operator != (::boost::math::quaternion const & lhs, octonion const & rhs) + BOOST_CONSTEXPR inline bool operator != (::boost::math::quaternion const & lhs, octonion const & rhs) BOOST_OCTONION_NOT_EQUAL_GENERATOR template - inline bool operator != (octonion const & lhs, ::boost::math::quaternion const & rhs) + BOOST_CONSTEXPR inline bool operator != (octonion const & lhs, ::boost::math::quaternion const & rhs) BOOST_OCTONION_NOT_EQUAL_GENERATOR template - inline bool operator != (octonion const & lhs, octonion const & rhs) + BOOST_CONSTEXPR inline bool operator != (octonion const & lhs, octonion const & rhs) BOOST_OCTONION_NOT_EQUAL_GENERATOR #undef BOOST_OCTONION_NOT_EQUAL_GENERATOR @@ -4367,14 +4434,14 @@ // values template - inline T real(octonion const & o) + BOOST_CONSTEXPR inline T real(octonion const & o) { return(o.real()); } template - inline octonion unreal(octonion const & o) + BOOST_CONSTEXPR inline octonion unreal(octonion const & o) { return(o.unreal()); } @@ -4468,18 +4535,9 @@ #undef BOOST_OCTONION_VALARRAY_LOADER - // Note: This is the Cayley norm, not the Euclidian norm... - template - inline T norm(octonion const & o) + BOOST_CONSTEXPR inline octonion conj(octonion const & o) { - return(real(o*conj(o))); - } - - - template - inline octonion conj(octonion const & o) - { return(octonion( +o.R_component_1(), -o.R_component_2(), -o.R_component_3(), @@ -4491,6 +4549,15 @@ } + // Note: This is the Cayley norm, not the Euclidian norm... + + template + BOOST_CONSTEXPR inline T norm(octonion const & o) + { + return(real(o*conj(o))); + } + + // Note: There is little point, for the octonions, to introduce the equivalents // to the complex "arg" and the quaternionic "cylindropolar". @@ -4720,28 +4787,6 @@ return(pow(octonion(static_cast(1))/o,-n)); } } - - - // helper templates for converting copy constructors (definition) - - namespace detail - { - - template< typename T, - typename U - > - octonion octonion_type_converter(octonion const & rhs) - { - return(octonion( static_cast(rhs.R_component_1()), - static_cast(rhs.R_component_2()), - static_cast(rhs.R_component_3()), - static_cast(rhs.R_component_4()), - static_cast(rhs.R_component_5()), - static_cast(rhs.R_component_6()), - static_cast(rhs.R_component_7()), - static_cast(rhs.R_component_8()))); - } - } } } Index: boost/math/quaternion.hpp =================================================================== --- boost/math/quaternion.hpp (revision 77075) +++ boost/math/quaternion.hpp (working copy) @@ -52,42 +52,42 @@ #endif /* BOOST_WORKAROUND(__GNUC__, < 3) */ #define BOOST_QUATERNION_ACCESSOR_GENERATOR(type) \ - type real() const \ + BOOST_CONSTEXPR type real() const \ { \ return(a); \ } \ \ - quaternion unreal() const \ + BOOST_CONSTEXPR quaternion unreal() const \ { \ return(quaternion(static_cast(0),b,c,d)); \ } \ \ - type R_component_1() const \ + BOOST_CONSTEXPR type R_component_1() const \ { \ return(a); \ } \ \ - type R_component_2() const \ + BOOST_CONSTEXPR type R_component_2() const \ { \ return(b); \ } \ \ - type R_component_3() const \ + BOOST_CONSTEXPR type R_component_3() const \ { \ return(c); \ } \ \ - type R_component_4() const \ + BOOST_CONSTEXPR type R_component_4() const \ { \ return(d); \ } \ \ - ::std::complex C_component_1() const \ + BOOST_CONSTEXPR ::std::complex C_component_1() const \ { \ return(::std::complex(a,b)); \ } \ \ - ::std::complex C_component_2() const \ + BOOST_CONSTEXPR ::std::complex C_component_2() const \ { \ return(::std::complex(c,d)); \ } @@ -153,7 +153,7 @@ // constructor for H seen as R^4 // (also default constructor) - explicit quaternion( T const & requested_a = T(), + BOOST_CONSTEXPR quaternion( T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T()) @@ -168,7 +168,7 @@ // constructor for H seen as C^2 - explicit quaternion( ::std::complex const & z0, + BOOST_CONSTEXPR quaternion( ::std::complex const & z0, ::std::complex const & z1 = ::std::complex()) : a(z0.real()), b(z0.imag()), @@ -186,7 +186,7 @@ // templated copy constructor template - explicit quaternion(quaternion const & a_recopier) + BOOST_CONSTEXPR quaternion(quaternion const & a_recopier) : a(static_cast(a_recopier.R_component_1())), b(static_cast(a_recopier.R_component_2())), c(static_cast(a_recopier.R_component_3())), @@ -436,26 +436,15 @@ template<> class quaternion; - // helper templates for converting copy constructors (declaration) - - namespace detail - { - - template< typename T, - typename U - > - quaternion quaternion_type_converter(quaternion const & rhs); - } - - // implementation of quaternion specialization #define BOOST_QUATERNION_CONSTRUCTOR_GENERATOR(type) \ - explicit quaternion( type const & requested_a = static_cast(0), \ + BOOST_CONSTEXPR quaternion( type const & requested_a = static_cast(0), \ type const & requested_b = static_cast(0), \ type const & requested_c = static_cast(0), \ type const & requested_d = static_cast(0)) \ + BOOST_NOEXCEPT \ : a(requested_a), \ b(requested_b), \ c(requested_c), \ @@ -463,8 +452,9 @@ { \ } \ \ - explicit quaternion( ::std::complex const & z0, \ + BOOST_CONSTEXPR quaternion( ::std::complex const & z0, \ ::std::complex const & z1 = ::std::complex()) \ + BOOST_NOEXCEPT \ : a(z0.real()), \ b(z0.imag()), \ c(z1.real()), \ @@ -475,6 +465,7 @@ #define BOOST_QUATERNION_MEMBER_ADD_GENERATOR_1(type) \ quaternion & operator += (type const & rhs) \ + BOOST_NOEXCEPT \ { \ a += rhs; \ \ @@ -483,6 +474,7 @@ #define BOOST_QUATERNION_MEMBER_ADD_GENERATOR_2(type) \ quaternion & operator += (::std::complex const & rhs) \ + BOOST_NOEXCEPT \ { \ a += rhs.real(); \ b += rhs.imag(); \ @@ -504,6 +496,7 @@ #define BOOST_QUATERNION_MEMBER_SUB_GENERATOR_1(type) \ quaternion & operator -= (type const & rhs) \ + BOOST_NOEXCEPT \ { \ a -= rhs; \ \ @@ -512,6 +505,7 @@ #define BOOST_QUATERNION_MEMBER_SUB_GENERATOR_2(type) \ quaternion & operator -= (::std::complex const & rhs) \ + BOOST_NOEXCEPT \ { \ a -= rhs.real(); \ b -= rhs.imag(); \ @@ -533,6 +527,7 @@ #define BOOST_QUATERNION_MEMBER_MUL_GENERATOR_1(type) \ quaternion & operator *= (type const & rhs) \ + BOOST_NOEXCEPT \ { \ a *= rhs; \ b *= rhs; \ @@ -544,6 +539,7 @@ #define BOOST_QUATERNION_MEMBER_MUL_GENERATOR_2(type) \ quaternion & operator *= (::std::complex const & rhs) \ + BOOST_NOEXCEPT \ { \ type ar = rhs.real(); \ type br = rhs.imag(); \ @@ -592,6 +588,7 @@ #define BOOST_QUATERNION_MEMBER_DIV_GENERATOR_1(type) \ quaternion & operator /= (type const & rhs) \ + BOOST_NOEXCEPT \ { \ a /= rhs; \ b /= rhs; \ @@ -855,15 +852,11 @@ // explicit copy constructors (precision-loosing converters) - explicit quaternion(quaternion const & a_recopier) - { - *this = detail::quaternion_type_converter(a_recopier); - } + explicit BOOST_CONSTEXPR quaternion(quaternion const & a_recopier) + BOOST_NOEXCEPT ; - explicit quaternion(quaternion const & a_recopier) - { - *this = detail::quaternion_type_converter(a_recopier); - } + explicit BOOST_CONSTEXPR quaternion(quaternion const & a_recopier) + BOOST_NOEXCEPT ; // destructor // (this is taken care of by the compiler itself) @@ -916,17 +909,20 @@ // converting copy constructor - explicit quaternion(quaternion const & a_recopier) + BOOST_CONSTEXPR quaternion(quaternion const & a_recopier) + BOOST_NOEXCEPT + : a(a_recopier.R_component_1()), + b(a_recopier.R_component_2()), + c(a_recopier.R_component_3()), + d(a_recopier.R_component_4()) { - *this = detail::quaternion_type_converter(a_recopier); + // nothing to do! } // explicit copy constructors (precision-loosing converters) - explicit quaternion(quaternion const & a_recopier) - { - *this = detail::quaternion_type_converter(a_recopier); - } + explicit BOOST_CONSTEXPR quaternion(quaternion const & a_recopier) + BOOST_NOEXCEPT ; // destructor // (this is taken care of by the compiler itself) @@ -979,14 +975,24 @@ // converting copy constructors - explicit quaternion(quaternion const & a_recopier) + BOOST_CONSTEXPR quaternion(quaternion const & a_recopier) + BOOST_NOEXCEPT + : a(a_recopier.R_component_1()), + b(a_recopier.R_component_2()), + c(a_recopier.R_component_3()), + d(a_recopier.R_component_4()) { - *this = detail::quaternion_type_converter(a_recopier); + // nothing to do! } - explicit quaternion(quaternion const & a_recopier) + BOOST_CONSTEXPR quaternion(quaternion const & a_recopier) + BOOST_NOEXCEPT + : a(a_recopier.R_component_1()), + b(a_recopier.R_component_2()), + c(a_recopier.R_component_3()), + d(a_recopier.R_component_4()) { - *this = detail::quaternion_type_converter(a_recopier); + // nothing to do! } // destructor @@ -1026,6 +1032,40 @@ }; + BOOST_CONSTEXPR inline + quaternion::quaternion( quaternion const &a_recopier ) + BOOST_NOEXCEPT + : a(static_cast(a_recopier.R_component_1())), + b(static_cast(a_recopier.R_component_2())), + c(static_cast(a_recopier.R_component_3())), + d(static_cast(a_recopier.R_component_4())) + { + //nothing to do! + } + + BOOST_CONSTEXPR inline + quaternion::quaternion( quaternion const &a_recopier ) + BOOST_NOEXCEPT + : a(static_cast(a_recopier.R_component_1())), + b(static_cast(a_recopier.R_component_2())), + c(static_cast(a_recopier.R_component_3())), + d(static_cast(a_recopier.R_component_4())) + { + //nothing to do! + } + + BOOST_CONSTEXPR inline + quaternion::quaternion( quaternion const &a_recopier ) + BOOST_NOEXCEPT + : a(static_cast(a_recopier.R_component_1())), + b(static_cast(a_recopier.R_component_2())), + c(static_cast(a_recopier.R_component_3())), + d(static_cast(a_recopier.R_component_4())) + { + //nothing to do! + } + + #undef BOOST_QUATERNION_MEMBER_ALGEBRAIC_GENERATOR #undef BOOST_QUATERNION_MEMBER_ADD_GENERATOR #undef BOOST_QUATERNION_MEMBER_SUB_GENERATOR @@ -1114,21 +1154,21 @@ template - inline quaternion operator + (quaternion const & q) + BOOST_CONSTEXPR inline quaternion operator + (quaternion const & q) { return(q); } template - inline quaternion operator - (quaternion const & q) + BOOST_CONSTEXPR inline quaternion operator - (quaternion const & q) { return(quaternion(-q.R_component_1(),-q.R_component_2(),-q.R_component_3(),-q.R_component_4())); } template - inline bool operator == (T const & lhs, quaternion const & rhs) + BOOST_CONSTEXPR inline bool operator == (T const & lhs, quaternion const & rhs) { return ( (rhs.R_component_1() == lhs)&& @@ -1140,7 +1180,7 @@ template - inline bool operator == (quaternion const & lhs, T const & rhs) + BOOST_CONSTEXPR inline bool operator == (quaternion const & lhs, T const & rhs) { return ( (lhs.R_component_1() == rhs)&& @@ -1152,7 +1192,7 @@ template - inline bool operator == (::std::complex const & lhs, quaternion const & rhs) + BOOST_CONSTEXPR inline bool operator == (::std::complex const & lhs, quaternion const & rhs) { return ( (rhs.R_component_1() == lhs.real())&& @@ -1164,7 +1204,7 @@ template - inline bool operator == (quaternion const & lhs, ::std::complex const & rhs) + BOOST_CONSTEXPR inline bool operator == (quaternion const & lhs, ::std::complex const & rhs) { return ( (lhs.R_component_1() == rhs.real())&& @@ -1176,7 +1216,7 @@ template - inline bool operator == (quaternion const & lhs, quaternion const & rhs) + BOOST_CONSTEXPR inline bool operator == (quaternion const & lhs, quaternion const & rhs) { return ( (rhs.R_component_1() == lhs.R_component_1())&& @@ -1193,23 +1233,23 @@ } template - inline bool operator != (T const & lhs, quaternion const & rhs) + BOOST_CONSTEXPR inline bool operator != (T const & lhs, quaternion const & rhs) BOOST_QUATERNION_NOT_EQUAL_GENERATOR template - inline bool operator != (quaternion const & lhs, T const & rhs) + BOOST_CONSTEXPR inline bool operator != (quaternion const & lhs, T const & rhs) BOOST_QUATERNION_NOT_EQUAL_GENERATOR template - inline bool operator != (::std::complex const & lhs, quaternion const & rhs) + BOOST_CONSTEXPR inline bool operator != (::std::complex const & lhs, quaternion const & rhs) BOOST_QUATERNION_NOT_EQUAL_GENERATOR template - inline bool operator != (quaternion const & lhs, ::std::complex const & rhs) + BOOST_CONSTEXPR inline bool operator != (quaternion const & lhs, ::std::complex const & rhs) BOOST_QUATERNION_NOT_EQUAL_GENERATOR template - inline bool operator != (quaternion const & lhs, quaternion const & rhs) + BOOST_CONSTEXPR inline bool operator != (quaternion const & lhs, quaternion const & rhs) BOOST_QUATERNION_NOT_EQUAL_GENERATOR #undef BOOST_QUATERNION_NOT_EQUAL_GENERATOR @@ -1554,14 +1594,14 @@ // values template - inline T real(quaternion const & q) + BOOST_CONSTEXPR inline T real(quaternion const & q) { return(q.real()); } template - inline quaternion unreal(quaternion const & q) + BOOST_CONSTEXPR inline quaternion unreal(quaternion const & q) { return(q.unreal()); } @@ -1651,22 +1691,22 @@ #undef BOOST_QUATERNION_VALARRAY_LOADER - // Note: This is the Cayley norm, not the Euclidian norm... - template - inline T norm(quaternionconst & q) + BOOST_CONSTEXPR inline quaternion conj(quaternion const & q) { - return(real(q*conj(q))); + return(quaternion( +q.R_component_1(), + -q.R_component_2(), + -q.R_component_3(), + -q.R_component_4())); } + // Note: This is the Cayley norm, not the Euclidian norm... + template - inline quaternion conj(quaternion const & q) + BOOST_CONSTEXPR inline T norm(quaternionconst & q) { - return(quaternion( +q.R_component_1(), - -q.R_component_2(), - -q.R_component_3(), - -q.R_component_4())); + return(real(q*conj(q))); } @@ -1894,24 +1934,6 @@ return(pow(quaternion(static_cast(1))/q,-n)); } } - - - // helper templates for converting copy constructors (definition) - - namespace detail - { - - template< typename T, - typename U - > - quaternion quaternion_type_converter(quaternion const & rhs) - { - return(quaternion( static_cast(rhs.R_component_1()), - static_cast(rhs.R_component_2()), - static_cast(rhs.R_component_3()), - static_cast(rhs.R_component_4()))); - } - } } } Index: libs/math/doc/quaternion/math-quaternion.qbk =================================================================== --- libs/math/doc/quaternion/math-quaternion.qbk (revision 77075) +++ libs/math/doc/quaternion/math-quaternion.qbk (working copy) @@ -120,20 +120,20 @@ template quaternion ``[link boost_quaternions.quaternions.non_mem.binary_division_operators operator /]`` (quaternion const & lhs, ::std::complex const & rhs); template quaternion ``[link boost_quaternions.quaternions.non_mem.binary_division_operators operator /]`` (quaternion const & lhs, quaternion const & rhs); - template quaternion ``[link boost_quaternions.quaternions.non_mem.unary_plus operator +]`` (quaternion const & q); - template quaternion ``[link boost_quaternions.quaternions.non_mem.unary_minus operator -]`` (quaternion const & q); + template constexpr quaternion ``[link boost_quaternions.quaternions.non_mem.unary_plus operator +]`` (quaternion const & q); + template constexpr quaternion ``[link boost_quaternions.quaternions.non_mem.unary_minus operator -]`` (quaternion const & q); - template bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (T const & lhs, quaternion const & rhs); - template bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (quaternion const & lhs, T const & rhs); - template bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (::std::complex const & lhs, quaternion const & rhs); - template bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (quaternion const & lhs, ::std::complex const & rhs); - template bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (quaternion const & lhs, quaternion const & rhs); + template constexpr bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (T const & lhs, quaternion const & rhs); + template constexpr bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (quaternion const & lhs, T const & rhs); + template constexpr bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (::std::complex const & lhs, quaternion const & rhs); + template constexpr bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (quaternion const & lhs, ::std::complex const & rhs); + template constexpr bool ``[link boost_quaternions.quaternions.non_mem.equality_operators operator ==]`` (quaternion const & lhs, quaternion const & rhs); - template bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (T const & lhs, quaternion const & rhs); - template bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (quaternion const & lhs, T const & rhs); - template bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (::std::complex const & lhs, quaternion const & rhs); - template bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (quaternion const & lhs, ::std::complex const & rhs); - template bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (quaternion const & lhs, quaternion const & rhs); + template constexpr bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (T const & lhs, quaternion const & rhs); + template constexpr bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (quaternion const & lhs, T const & rhs); + template constexpr bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (::std::complex const & lhs, quaternion const & rhs); + template constexpr bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (quaternion const & lhs, ::std::complex const & rhs); + template constexpr bool ``[link boost_quaternions.quaternions.non_mem.inequality_operators operator !=]`` (quaternion const & lhs, quaternion const & rhs); template ::std::basic_istream& ``[link boost_quaternions.quaternions.non_mem.stream_extractor operator >>]`` (::std::basic_istream & is, quaternion & q); @@ -142,14 +142,14 @@ ::std::basic_ostream& operator ``[link boost_quaternions.quaternions.non_mem.stream_inserter operator <<]`` (::std::basic_ostream & os, quaternion const & q); // values - template T ``[link boost_quaternions.quaternions.value_op.real_and_unreal real]``(quaternion const & q); - template quaternion ``[link boost_quaternions.quaternions.value_op.real_and_unreal unreal]``(quaternion const & q); + template constexpr T ``[link boost_quaternions.quaternions.value_op.real_and_unreal real]``(quaternion const & q); + template constexpr quaternion ``[link boost_quaternions.quaternions.value_op.real_and_unreal unreal]``(quaternion const & q); template T ``[link boost_quaternions.quaternions.value_op.sup sup]``(quaternion const & q); template T ``[link boost_quaternions.quaternions.value_op.l1 l1]``(quaternion const & q); template T ``[link boost_quaternions.quaternions.value_op.abs abs]``(quaternion const & q); - template T ``[link boost_quaternions.quaternions.value_op.norm norm]``(quaternionconst & q); - template quaternion ``[link boost_quaternions.quaternions.value_op.conj conj]``(quaternion const & q); + template /*constexpr*/ T ``[link boost_quaternions.quaternions.value_op.norm norm]``(quaternionconst & q); + template constexpr quaternion ``[link boost_quaternions.quaternions.value_op.conj conj]``(quaternion const & q); template quaternion ``[link boost_quaternions.quaternions.creation_spherical spherical]``(T const & rho, T const & theta, T const & phi1, T const & phi2); template quaternion ``[link boost_quaternions.quaternions.creation_semipolar semipolar]``(T const & rho, T const & alpha, T const & theta1, T const & theta2); @@ -183,19 +183,19 @@ typedef T ``[link boost_quaternions.quaternions.mem_typedef value_type]``; - 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()); - explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex()); + 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()); + constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex()); template - explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier); + constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier); - T ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const; - quaternion ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const; - T ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const; - T ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const; - T ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const; - T ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const; - ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const; - ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const; + constexpr T ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const; + constexpr quaternion ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const; + constexpr T ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const; + constexpr T ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const; + constexpr T ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const; + constexpr T ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const; + constexpr ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const; + constexpr ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const; quaternion& ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(quaternion const & a_affecter); template @@ -239,19 +239,19 @@ public: typedef float ``[link boost_quaternions.quaternions.mem_typedef value_type]``; - 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); - explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex()); - explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier); - explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier); + 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; + constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex()) noexcept; + constexpr explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier) noexcept; + constexpr explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier) noexcept; - float ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const; - quaternion ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const; - float ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const; - float ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const; - float ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const; - float ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const; - ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const; - ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const; + constexpr float ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const; + constexpr quaternion ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const; + constexpr float ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const; + constexpr float ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const; + constexpr float ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const; + constexpr float ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const; + constexpr ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const; + constexpr ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const; quaternion& ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(quaternion const & a_affecter); template @@ -259,22 +259,22 @@ quaternion& ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(float const & a_affecter); quaternion& ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(::std::complex const & a_affecter); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(float const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(::std::complex const & rhs); + quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(float const & rhs) noexcept; + quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(::std::complex const & rhs) noexcept; template quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(quaternion const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(float const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(::std::complex const & rhs); + quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(float const & rhs) noexcept; + quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(::std::complex const & rhs) noexcept; template quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(quaternion const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(float const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(::std::complex const & rhs); + quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(float const & rhs) noexcept; + quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(::std::complex const & rhs) noexcept; template quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(quaternion const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(float const & rhs); + quaternion& ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(float const & rhs) noexcept; quaternion& ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(::std::complex const & rhs); template quaternion& ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(quaternion const & rhs); @@ -288,19 +288,19 @@ public: typedef double ``[link boost_quaternions.quaternions.mem_typedef value_type]``; - 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); - explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex()); - explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier); - explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier); + 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; + constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex()) noexcept; + constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier) noexcept; + constexpr explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier) noexcept; - double ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const; - quaternion ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const; - double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const; - double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const; - double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const; - double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const; - ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const; - ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const; + constexpr double ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const; + constexpr quaternion ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const; + constexpr double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const; + constexpr double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const; + constexpr double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const; + constexpr double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const; + constexpr ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const; + constexpr ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const; quaternion& ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(quaternion const & a_affecter); template @@ -308,22 +308,22 @@ quaternion& ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(double const & a_affecter); quaternion& ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(::std::complex const & a_affecter); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(double const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(::std::complex const & rhs); + quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(double const & rhs) noexcept; + quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(::std::complex const & rhs) noexcept; template quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(quaternion const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(double const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(::std::complex const & rhs); + quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(double const & rhs) noexcept; + quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(::std::complex const & rhs) noexcept; template quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(quaternion const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(double const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(::std::complex const & rhs); + quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(double const & rhs) noexcept; + quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(::std::complex const & rhs) noexcept; template quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(quaternion const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(double const & rhs); + quaternion& ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(double const & rhs) noexcept; quaternion& ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(::std::complex const & rhs); template quaternion& ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(quaternion const & rhs); @@ -337,19 +337,19 @@ public: typedef long double ``[link boost_quaternions.quaternions.mem_typedef value_type]``; - 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); - explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex()); - explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier); - explicit ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier); + 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; + constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex()) noexcept; + constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier) noexcept; + constexpr ``[link boost_quaternions.quaternions.mem_fun.constructors quaternion]``(quaternion const & a_recopier) noexcept; - long double ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const; - quaternion ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const; - long double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const; - long double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const; - long double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const; - long double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const; - ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const; - ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const; + constexpr long double ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts real]``() const; + constexpr quaternion ``[link boost_quaternions.quaternions.mem_fun.real_and_unreal_parts unreal]``() const; + constexpr long double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_1]``() const; + constexpr long double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_2]``() const; + constexpr long double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_3]``() const; + constexpr long double ``[link boost_quaternions.quaternions.mem_fun.individual_real_components R_component_4]``() const; + constexpr ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_1]``() const; + constexpr ::std::complex ``[link boost_quaternions.quaternions.mem_fun.individual_complex__components C_component_2]``() const; quaternion& ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(quaternion const & a_affecter); template @@ -357,22 +357,22 @@ quaternion& ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(long double const & a_affecter); quaternion& ``[link boost_quaternions.quaternions.mem_fun.assignment_operators operator = ]``(::std::complex const & a_affecter); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(long double const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(::std::complex const & rhs); + quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(long double const & rhs) noexcept; + quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(::std::complex const & rhs) noexcept; template quaternion& ``[link boost_quaternions.quaternions.mem_fun.addition_operators operator += ]``(quaternion const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(long double const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(::std::complex const & rhs); + quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(long double const & rhs) noexcept; + quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(::std::complex const & rhs) noexcept; template quaternion& ``[link boost_quaternions.quaternions.mem_fun.subtraction_operators operator -= ]``(quaternion const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(long double const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(::std::complex const & rhs); + quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(long double const & rhs) noexcept; + quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(::std::complex const & rhs) noexcept; template quaternion& ``[link boost_quaternions.quaternions.mem_fun.multiplication_operators operator *= ]``(quaternion const & rhs); - quaternion& ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(long double const & rhs); + quaternion& ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(long double const & rhs) noexcept; quaternion& ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(::std::complex const & rhs); template quaternion& ``[link boost_quaternions.quaternions.mem_fun.division_operators operator /= ]``(quaternion const & rhs); @@ -412,31 +412,31 @@ Template version: - explicit quaternion(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T()); - explicit quaternion(::std::complex const & z0, ::std::complex const & z1 = ::std::complex()); + constexpr quaternion(T const & requested_a = T(), T const & requested_b = T(), T const & requested_c = T(), T const & requested_d = T()); + constexpr quaternion(::std::complex const & z0, ::std::complex const & z1 = ::std::complex()); template - explicit quaternion(quaternion const & a_recopier); + constexpr quaternion(quaternion const & a_recopier); Float specialization version: - 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); - explicit quaternion(::std::complex const & z0,::std::complex const & z1 = ::std::complex()); - explicit quaternion(quaternion const & a_recopier); - explicit quaternion(quaternion const & a_recopier); + 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; + constexpr quaternion(::std::complex const & z0,::std::complex const & z1 = ::std::complex()) noexcept; + constexpr explicit quaternion(quaternion const & a_recopier) noexcept; + constexpr explicit quaternion(quaternion const & a_recopier) noexcept; Double specialization version: - 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); - explicit quaternion(::std::complex const & z0, ::std::complex const & z1 = ::std::complex()); - explicit quaternion(quaternion const & a_recopier); - explicit quaternion(quaternion const & a_recopier); + 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; + constexpr quaternion(::std::complex const & z0, ::std::complex const & z1 = ::std::complex()) noexcept; + constexpr quaternion(quaternion const & a_recopier) noexcept; + constexpr explicit quaternion(quaternion const & a_recopier) noexcept; Long double specialization version: - 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); - explicit quaternion( ::std::complex const & z0, ::std::complex const & z1 = ::std::complex()); - explicit quaternion(quaternion const & a_recopier); - explicit quaternion(quaternion const & a_recopier); + 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; + constexpr quaternion( ::std::complex const & z0, ::std::complex const & z1 = ::std::complex()) noexcept; + constexpr quaternion(quaternion const & a_recopier) noexcept; + constexpr quaternion(quaternion const & a_recopier) noexcept; A default constructor is provided for each form, which initializes each component to the default values for their type @@ -450,8 +450,7 @@ constructors must not throw. Destructors and untemplated copy constructors (from the same type) are -provided by the compiler. Converting copy constructors make use of a -templated helper function in a "detail" subnamespace. +provided by the compiler. [h3 Other member functions] [h4 Real and Unreal Parts] Index: libs/math/doc/octonion/math-octonion.qbk =================================================================== --- libs/math/doc/octonion/math-octonion.qbk (revision 77075) +++ libs/math/doc/octonion/math-octonion.qbk (working copy) @@ -121,24 +121,24 @@ template octonion ``[link boost_octonions.octonions.non_mem.binary_division_operators operator /]`` (octonion const & lhs, ::boost::math::quaternion const & rhs); template octonion ``[link boost_octonions.octonions.non_mem.binary_division_operators operator /]`` (octonion const & lhs, octonion const & rhs); - template octonion ``[link boost_octonions.octonions.non_mem.unary_plus_and_minus_operators operator +]`` (octonion const & o); - template octonion ``[link boost_octonions.octonions.non_mem.unary_plus_and_minus_operators operator -]`` (octonion const & o); + template constexpr octonion ``[link boost_octonions.octonions.non_mem.unary_plus_and_minus_operators operator +]`` (octonion const & o); + template constexpr octonion ``[link boost_octonions.octonions.non_mem.unary_plus_and_minus_operators operator -]`` (octonion const & o); - template bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (T const & lhs, octonion const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion const & lhs, T const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (::std::complex const & lhs, octonion const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion const & lhs, ::std::complex const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (::boost::math::quaternion const & lhs, octonion const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion const & lhs, ::boost::math::quaternion const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion const & lhs, octonion const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (T const & lhs, octonion const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion const & lhs, T const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (::std::complex const & lhs, octonion const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion const & lhs, ::std::complex const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (::boost::math::quaternion const & lhs, octonion const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion const & lhs, ::boost::math::quaternion const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_equality_operators operator ==]`` (octonion const & lhs, octonion const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (T const & lhs, octonion const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion const & lhs, T const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (::std::complex const & lhs, octonion const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion const & lhs, ::std::complex const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (::boost::math::quaternion const & lhs, octonion const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion const & lhs, ::boost::math::quaternion const & rhs); - template bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion const & lhs, octonion const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (T const & lhs, octonion const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion const & lhs, T const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (::std::complex const & lhs, octonion const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion const & lhs, ::std::complex const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (::boost::math::quaternion const & lhs, octonion const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion const & lhs, ::boost::math::quaternion const & rhs); + template constexpr bool ``[link boost_octonions.octonions.non_mem.binary_inequality_operators operator !=]`` (octonion const & lhs, octonion const & rhs); template ::std::basic_istream & ``[link boost_octonions.octonions.non_mem.stream_extractor operator >>]`` (::std::basic_istream & is, octonion & o); @@ -148,14 +148,14 @@ // values - template T ``[link boost_octonions.octonions.octonion_value_operations.real_and_unreal real]``(octonion const & o); - template octonion ``[link boost_octonions.octonions.octonion_value_operations.real_and_unreal unreal]``(octonion const & o); + template constexpr T ``[link boost_octonions.octonions.octonion_value_operations.real_and_unreal real]``(octonion const & o); + template constexpr octonion ``[link boost_octonions.octonions.octonion_value_operations.real_and_unreal unreal]``(octonion const & o); template T ``[link boost_octonions.octonions.octonion_value_operations.sup sup]``(octonion const & o); template T ``[link boost_octonions.octonions.octonion_value_operations.l1 l1]``(octonionconst & o); template T ``[link boost_octonions.octonions.octonion_value_operations.abs abs]``(octonion const & o); - template T ``[link boost_octonions.octonions.octonion_value_operations.norm norm]``(octonionconst & o); - template octonion ``[link boost_octonions.octonions.octonion_value_operations.conj conj]``(octonion const & o); + template /*constexpr*/ T ``[link boost_octonions.octonions.octonion_value_operations.norm norm]``(octonionconst & o); + template constexpr octonion ``[link boost_octonions.octonions.octonion_value_operations.conj conj]``(octonion const & o); template octonion ``[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); template octonion ``[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); @@ -187,31 +187,31 @@ public: typedef T value_type; - 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()); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()); + 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()); + constexpr ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()); + constexpr ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()); template - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier); + constexpr ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier); - T ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const; - octonion ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const; + constexpr T ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const; + constexpr octonion ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const; - T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const; - T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const; - T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const; - T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const; - T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const; - T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const; - T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const; - T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const; + constexpr T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const; + constexpr T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const; + constexpr T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const; + constexpr T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const; + constexpr T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const; + constexpr T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const; + constexpr T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const; + constexpr T ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const; - ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const; - ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const; + constexpr ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const; + constexpr ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const; octonion & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion const & a_affecter); template @@ -259,31 +259,31 @@ public: typedef float value_type; - 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); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier); + 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; + constexpr ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()) noexcept; + constexpr ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()) noexcept; + constexpr explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier) noexcept; + constexpr explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier) noexcept; - float ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const; - octonion ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const; + constexpr float ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const ; + constexpr octonion ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const; - float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const; - float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const; - float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const; - float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const; - float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const; - float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const; - float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const; - float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const; + constexpr float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const; + constexpr float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const; + constexpr float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const; + constexpr float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const; + constexpr float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const; + constexpr float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const; + constexpr float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const; + constexpr float ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const; - ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const; - ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const; + constexpr ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const; + constexpr ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const; octonion & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion const & a_affecter); template @@ -292,25 +292,25 @@ octonion & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (::std::complex const & a_affecter); octonion & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (::boost::math::quaternion const & a_affecter); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (float const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion const & rhs); + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (float const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion const & rhs) noexcept; template octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (octonion const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (float const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion const & rhs); + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (float const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion const & rhs) noexcept; template octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (octonion const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (float const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion const & rhs); + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (float const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion const & rhs) noexcept; template octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (octonion const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (float const & rhs); + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (float const & rhs) noexcept; octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (::std::complex const & rhs); octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (::boost::math::quaternion const & rhs); template @@ -325,31 +325,31 @@ public: typedef double value_type; - 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); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier); + 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; + constexpr ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()) noexcept; + constexpr ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()) noexcept; + constexpr ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier) noexcept; + constexpr explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier) noexcept; - double ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const; - octonion ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const; + constexpr double ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const; + constexpr octonion ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const; - double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const; - double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const; - double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const; - double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const; - double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const; - double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const; - double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const; - double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const; + constexpr double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const; + constexpr double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const; + constexpr double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const; + constexpr double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const; + constexpr double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const; + constexpr double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const; + constexpr double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const; + constexpr double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const; - ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const; - ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const; + constexpr ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const; + constexpr ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const; octonion & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion const & a_affecter); template @@ -358,25 +358,25 @@ octonion & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (::std::complex const & a_affecter); octonion & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (::boost::math::quaternion const & a_affecter); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (double const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion const & rhs); + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (double const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion const & rhs) noexcept; template octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (octonion const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (double const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion const & rhs); + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (double const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion const & rhs) noexcept; template octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (octonion const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (double const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion const & rhs); + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (double const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion const & rhs) noexcept; template octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (octonion const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (double const & rhs); + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (double const & rhs) noexcept; octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (::std::complex const & rhs); octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (::boost::math::quaternion const & rhs); template @@ -391,31 +391,31 @@ public: typedef long double value_type; - 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); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``( ::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``( ::boost::math::quaternion const & q0, ::boost::math::quaternion const & z1 = ::boost::math::quaternion()); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier); - explicit ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier); + 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; + constexpr ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``( ::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()) noexcept; + constexpr ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``( ::boost::math::quaternion const & q0, ::boost::math::quaternion const & z1 = ::boost::math::quaternion()) noexcept; + constexpr ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier) noexcept; + constexpr ``[link boost_octonions.octonions.octonion_member_functions.constructors octonion]``(octonion const & a_recopier) noexcept; - long double ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const; - octonion ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const; + constexpr long double ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts real]``() const; + constexpr octonion ``[link boost_octonions.octonions.octonion_member_functions.real_and_unreal_parts unreal]``() const; - long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const; - long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const; - long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const; - long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const; - long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const; - long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const; - long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const; - long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const; + constexpr long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_1]``() const; + constexpr long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_2]``() const; + constexpr long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_3]``() const; + constexpr long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_4]``() const; + constexpr long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_5]``() const; + constexpr long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_6]``() const; + constexpr long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_7]``() const; + constexpr long double ``[link boost_octonions.octonions.octonion_member_functions.individual_real_components R_component_8]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const; - ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_1]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_2]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_3]``() const; + constexpr ::std::complex ``[link boost_octonions.octonions.octonion_member_functions.individual_complex_components C_component_4]``() const; - ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const; - ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const; + constexpr ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_1]``() const; + constexpr ::boost::math::quaternion ``[link boost_octonions.octonions.octonion_member_functions.individual_quaternion_components H_component_2]``() const; octonion & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (octonion const & a_affecter); template @@ -424,25 +424,25 @@ octonion & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (::std::complex const & a_affecter); octonion & ``[link boost_octonions.octonions.octonion_member_functions.assignment_operators operator =]`` (::boost::math::quaternion const & a_affecter); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (long double const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion const & rhs); + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (long double const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::std::complex const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (::boost::math::quaternion const & rhs) noexcept; template octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator +=]`` (octonion const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (long double const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion const & rhs); + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (long double const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::std::complex const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (::boost::math::quaternion const & rhs) noexcept; template octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator -=]`` (octonion const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (long double const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion const & rhs); + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (long double const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::std::complex const & rhs) noexcept; + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (::boost::math::quaternion const & rhs) noexcept; template octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator *=]`` (octonion const & rhs); - octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (long double const & rhs); + octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (long double const & rhs) noexcept; octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (::std::complex const & rhs); octonion & ``[link boost_octonions.octonions.octonion_member_functions.other_member_operators operator /=]`` (::boost::math::quaternion const & rhs); template @@ -483,35 +483,35 @@ Template version: - 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()); - explicit octonion(::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()); - explicit octonion(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()); + 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()); + constexpr octonion(::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()); + constexpr octonion(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()); template - explicit octonion(octonion const & a_recopier); + constexpr octonion(octonion const & a_recopier); Float specialization version: - 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); - explicit octonion(::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()); - explicit octonion(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()); - explicit octonion(octonion const & a_recopier); - explicit octonion(octonion const & a_recopier); + 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; + constexpr octonion(::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()) noexcept; + constexpr octonion(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()) noexcept; + constexpr explicit octonion(octonion const & a_recopier) noexcept; + constexpr explicit octonion(octonion const & a_recopier) noexcept; Double specialization version: - 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); - explicit octonion(::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()); - explicit octonion(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()); - explicit octonion(octonion const & a_recopier); - explicit octonion(octonion const & a_recopier); + 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; + constexpr octonion(::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()) noexcept; + constexpr octonion(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()) noexcept; + constexpr octonion(octonion const & a_recopier) noexcept; + constexpr explicit octonion(octonion const & a_recopier) noexcept; Long double specialization version: - 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); - explicit octonion( ::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()); - explicit octonion(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()); - explicit octonion(octonion const & a_recopier); - explicit octonion(octonion const & a_recopier); + 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; + constexpr octonion( ::std::complex const & z0, ::std::complex const & z1 = ::std::complex(), ::std::complex const & z2 = ::std::complex(), ::std::complex const & z3 = ::std::complex()) noexcept; + constexpr octonion(::boost::math::quaternion const & q0, ::boost::math::quaternion const & q1 = ::boost::math::quaternion()) noexcept; + constexpr octonion(octonion const & a_recopier) noexcept; + constexpr octonion(octonion const & a_recopier) noexcept; A default constructor is provided for each form, which initializes each component to the default values for their type (i.e. zero for floating numbers). @@ -525,8 +525,7 @@ the base type's constructors must not throw. Destructors and untemplated copy constructors (from the same type) -are provided by the compiler. Converting copy constructors make use -of a templated helper function in a "detail" subnamespace. +are provided by the compiler. [h3 Other member functions] @@ -710,7 +709,7 @@ template octonion operator / (octonion const & lhs, octonion const & rhs); These operators return `octonion(lhs) /= rhs`. It is of course still an -error to divide by zero... +error to divide by zero.... [h4 Binary Equality Operators] @@ -722,7 +721,7 @@ template bool operator == (octonion const & lhs, ::boost::math::quaternion const & rhs); template bool operator == (octonion const & lhs, octonion const & rhs); -These return true if and only if the four components of `octonion(lhs)` +These return true if and only if the eight components of `octonion(lhs)` are equal to their counterparts in `octonion(rhs)`. As with any floating-type entity, this is essentially meaningless.