Ticket #11336: test_abs_units.cpp

File test_abs_units.cpp, 1.7 KB (added by Roger Leigh <rleigh@…>, 7 years ago)

Example of failure to get unit name/symbol from absolute units

Line 
1#include <boost/units/base_units/si/kelvin.hpp>
2#include <boost/units/base_units/temperature/celsius.hpp>
3#include <boost/units/base_units/temperature/fahrenheit.hpp>
4#include <boost/units/unit.hpp>
5#include <boost/units/quantity.hpp>
6#include <boost/units/systems/si.hpp>
7#include <boost/units/io.hpp>
8
9#include <iostream>
10
11typedef boost::units::temperature::celsius_base_unit::unit_type celsius_unit;
12BOOST_UNITS_STATIC_CONSTANT(celsius, celsius_unit);
13typedef boost::units::quantity<celsius_unit> celsius_quantity;
14
15typedef boost::units::absolute<celsius_unit> celsius_absolute_unit;
16BOOST_UNITS_STATIC_CONSTANT(celsius_absolute, celsius_absolute_unit);
17typedef boost::units::quantity<celsius_absolute_unit> celsius_absolute_quantity;
18
19// template<class Unit, class T>
20// std::string unit_name(const boost::units::quantity<boost::units::absolute<Unit>, T>&)
21// {
22// return name_string(Unit());
23// }
24
25// template<class Unit, class T>
26// std::string unit_symbol(const boost::units::quantity<boost::units::absolute<Unit>, T>&)
27// {
28// return symbol_string(Unit());
29// }
30
31template<class Unit, class T>
32std::string unit_name(const boost::units::quantity<Unit, T>&)
33{
34 return name_string(Unit());
35}
36
37template<class Unit, class T>
38std::string unit_symbol(const boost::units::quantity<Unit, T>&)
39{
40 return symbol_string(Unit());
41}
42
43int main()
44{
45 celsius_quantity c = 54.2 * celsius;
46 std::cout << "Name is " << unit_name(c) << '\n';
47 std::cout << "Name is " << unit_symbol(c) << '\n';
48 std::cout << "Value is " << c << '\n';
49
50 celsius_absolute_quantity ac = 54.2 * celsius_absolute;
51 std::cout << "Name is " << unit_name(ac) << '\n';
52 std::cout << "Name is " << unit_symbol(ac) << '\n';
53 std::cout << "Value is " << ac << '\n';
54}