 Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world.

libs/units/example/unit.cpp

// Boost.Units - A C++ library for zero-overhead dimensional analysis and
// unit/quantity manipulation and conversion
//
// Copyright (C) 2003-2008 Matthias Christian Schabel
// Copyright (C) 2008 Steven Watanabe
//
// accompanying file LICENSE_1_0.txt or copy at

/**
\file

\brief unit.cpp

\details
Test unit algebra.

Output:
@verbatim

//[unit_output
L             = m
L+L           = m
L-L           = m
L/L           = dimensionless
meter*meter   = m^2
M*(L/T)*(L/T) = m^2 kg s^-2
M*(L/T)^2     = m^2 kg s^-2
L^3           = m^3
L^(3/2)       = m^(3/2)
2vM           = kg^(1/2)
(3/2)vM       = kg^(2/3)
//]

@endverbatim
**/

#include <iostream>

#include "test_system.hpp"

#include <boost/units/pow.hpp>

int main()
{
using namespace boost::units;
using namespace boost::units::test;

//[unit_snippet_1
const length                    L;
const mass                      M;
// needs to be namespace-qualified because of global time definition
const boost::units::test::time  T;
const energy                    E;
//]

std::cout << "L             = " << L << std::endl
<< "L+L           = " << L+L << std::endl
<< "L-L           = " << L-L << std::endl
<< "L/L           = " << L/L << std::endl
<< "meter*meter   = " << meter*meter << std::endl
<< "M*(L/T)*(L/T) = " << M*(L/T)*(L/T) << std::endl
<< "M*(L/T)^2     = " << M*pow<2>(L/T) << std::endl
<< "L^3           = " << pow<3>(L) << std::endl
<< "L^(3/2)       = " << pow<static_rational<3,2> >(L)
<< std::endl
<< "2vM           = " << root<2>(M) << std::endl
<< "(3/2)vM       = " << root<static_rational<3,2> >(M)
<< std::endl;

return 0;
}