...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
namespace boost{ namespace math{ template<typename T> class octonion; template<> class octonion<float>; template<> class octonion<double>; template<> class octonion<long double>; // operators template<typename T> octonion<T> operator + (T const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator + (octonion<T> const & lhs, T const & rhs); template<typename T> octonion<T> operator + (::std::complex<T> const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator + (octonion<T> const & lhs, ::std::complex<T> const & rhs); template<typename T> octonion<T> operator + (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator + (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs); template<typename T> octonion<T> operator + (octonion<T> const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator - (T const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator - (octonion<T> const & lhs, T const & rhs); template<typename T> octonion<T> operator - (::std::complex<T> const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator - (octonion<T> const & lhs, ::std::complex<T> const & rhs); template<typename T> octonion<T> operator - (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator - (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs); template<typename T> octonion<T> operator - (octonion<T> const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator * (T const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator * (octonion<T> const & lhs, T const & rhs); template<typename T> octonion<T> operator * (::std::complex<T> const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator * (octonion<T> const & lhs, ::std::complex<T> const & rhs); template<typename T> octonion<T> operator * (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator * (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs); template<typename T> octonion<T> operator * (octonion<T> const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator / (T const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator / (octonion<T> const & lhs, T const & rhs); template<typename T> octonion<T> operator / (::std::complex<T> const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator / (octonion<T> const & lhs, ::std::complex<T> const & rhs); template<typename T> octonion<T> operator / (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator / (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs); template<typename T> octonion<T> operator / (octonion<T> const & lhs, octonion<T> const & rhs); template<typename T> octonion<T> operator + (octonion<T> const & o); template<typename T> octonion<T> operator - (octonion<T> const & o); template<typename T> bool operator == (T const & lhs, octonion<T> const & rhs); template<typename T> bool operator == (octonion<T> const & lhs, T const & rhs); template<typename T> bool operator == (::std::complex<T> const & lhs, octonion<T> const & rhs); template<typename T> bool operator == (octonion<T> const & lhs, ::std::complex<T> const & rhs); template<typename T> bool operator == (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs); template<typename T> bool operator == (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs); template<typename T> bool operator == (octonion<T> const & lhs, octonion<T> const & rhs); template<typename T> bool operator != (T const & lhs, octonion<T> const & rhs); template<typename T> bool operator != (octonion<T> const & lhs, T const & rhs); template<typename T> bool operator != (::std::complex<T> const & lhs, octonion<T> const & rhs); template<typename T> bool operator != (octonion<T> const & lhs, ::std::complex<T> const & rhs); template<typename T> bool operator != (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs); template<typename T> bool operator != (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs); template<typename T> bool operator != (octonion<T> const & lhs, octonion<T> const & rhs); template<typename T, typename charT, class traits> ::std::basic_istream<charT,traits> & operator >> (::std::basic_istream<charT,traits> & is, octonion<T> & o); template<typename T, typename charT, class traits> ::std::basic_ostream<charT,traits> & operator << (::std::basic_ostream<charT,traits> & os, octonion<T> const & o); // values template<typename T> T real(octonion<T> const & o); template<typename T> octonion<T> unreal(octonion<T> const & o); template<typename T> T sup(octonion<T> const & o); template<typename T> T l1(octonion<T>const & o); template<typename T> T abs(octonion<T> const & o); template<typename T> T norm(octonion<T>const & o); template<typename T> octonion<T> conj(octonion<T> const & o); template<typename T> octonion<T> 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<typename T> octonion<T> 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); template<typename T> octonion<T> cylindrical(T const & r, T const & angle, T const & h1, T const & h2, T const & h3, T const & h4, T const & h5, T const & h6); // transcendentals template<typename T> octonion<T> exp(octonion<T> const & o); template<typename T> octonion<T> cos(octonion<T> const & o); template<typename T> octonion<T> sin(octonion<T> const & o); template<typename T> octonion<T> tan(octonion<T> const & o); template<typename T> octonion<T> cosh(octonion<T> const & o); template<typename T> octonion<T> sinh(octonion<T> const & o); template<typename T> octonion<T> tanh(octonion<T> const & o); template<typename T> octonion<T> pow(octonion<T> const & o, int n); } } // namespaces