Chris@16
|
1 // Boost.Units - A C++ library for zero-overhead dimensional analysis and
|
Chris@16
|
2 // unit/quantity manipulation and conversion
|
Chris@16
|
3 //
|
Chris@16
|
4 // Copyright (C) 2003-2008 Matthias Christian Schabel
|
Chris@16
|
5 // Copyright (C) 2008 Steven Watanabe
|
Chris@16
|
6 //
|
Chris@16
|
7 // Distributed under the Boost Software License, Version 1.0. (See
|
Chris@16
|
8 // accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
9 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
10
|
Chris@16
|
11 #ifndef BOOST_UNITS_UNIT_HPP
|
Chris@16
|
12 #define BOOST_UNITS_UNIT_HPP
|
Chris@16
|
13
|
Chris@16
|
14 #include <boost/static_assert.hpp>
|
Chris@16
|
15 #include <boost/mpl/bool.hpp>
|
Chris@16
|
16 #include <boost/mpl/assert.hpp>
|
Chris@16
|
17 #include <boost/type_traits/is_same.hpp>
|
Chris@16
|
18
|
Chris@16
|
19 #include <boost/units/config.hpp>
|
Chris@16
|
20 #include <boost/units/dimension.hpp>
|
Chris@16
|
21 #include <boost/units/operators.hpp>
|
Chris@16
|
22 #include <boost/units/units_fwd.hpp>
|
Chris@16
|
23 #include <boost/units/homogeneous_system.hpp>
|
Chris@16
|
24 #include <boost/units/heterogeneous_system.hpp>
|
Chris@16
|
25 #include <boost/units/is_dimension_list.hpp>
|
Chris@16
|
26 #include <boost/units/reduce_unit.hpp>
|
Chris@16
|
27 #include <boost/units/static_rational.hpp>
|
Chris@16
|
28
|
Chris@16
|
29 namespace boost {
|
Chris@16
|
30
|
Chris@16
|
31 namespace units {
|
Chris@16
|
32
|
Chris@16
|
33 /// class representing a model-dependent unit with no associated value
|
Chris@16
|
34
|
Chris@16
|
35 /// (e.g. meters, Kelvin, feet, etc...)
|
Chris@16
|
36 template<class Dim,class System, class Enable>
|
Chris@16
|
37 class unit
|
Chris@16
|
38 {
|
Chris@16
|
39 public:
|
Chris@16
|
40 typedef unit<Dim, System> unit_type;
|
Chris@16
|
41 typedef unit<Dim,System> this_type;
|
Chris@16
|
42 typedef Dim dimension_type;
|
Chris@16
|
43 typedef System system_type;
|
Chris@16
|
44
|
Chris@16
|
45 unit() { }
|
Chris@16
|
46 unit(const this_type&) { }
|
Chris@16
|
47 //~unit() { }
|
Chris@16
|
48
|
Chris@16
|
49 this_type& operator=(const this_type&) { return *this; }
|
Chris@16
|
50
|
Chris@16
|
51 // sun will ignore errors resulting from templates
|
Chris@16
|
52 // instantiated in the return type of a function.
|
Chris@16
|
53 // Make sure that we get an error anyway by putting.
|
Chris@16
|
54 // the check in the destructor.
|
Chris@16
|
55 #ifdef __SUNPRO_CC
|
Chris@16
|
56 ~unit() {
|
Chris@16
|
57 BOOST_MPL_ASSERT((detail::check_system<System, Dim>));
|
Chris@16
|
58 BOOST_MPL_ASSERT((is_dimension_list<Dim>));
|
Chris@16
|
59 }
|
Chris@16
|
60 #else
|
Chris@16
|
61 private:
|
Chris@16
|
62 BOOST_MPL_ASSERT((detail::check_system<System, Dim>));
|
Chris@16
|
63 BOOST_MPL_ASSERT((is_dimension_list<Dim>));
|
Chris@16
|
64 #endif
|
Chris@16
|
65 };
|
Chris@16
|
66
|
Chris@16
|
67 }
|
Chris@16
|
68
|
Chris@16
|
69 }
|
Chris@16
|
70
|
Chris@16
|
71 #if BOOST_UNITS_HAS_BOOST_TYPEOF
|
Chris@16
|
72
|
Chris@16
|
73 #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
|
Chris@16
|
74
|
Chris@16
|
75 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::units::unit, 2)
|
Chris@16
|
76
|
Chris@16
|
77 #endif
|
Chris@16
|
78
|
Chris@16
|
79 namespace boost {
|
Chris@16
|
80
|
Chris@16
|
81 namespace units {
|
Chris@16
|
82
|
Chris@16
|
83 /// Returns a unique type for every unit.
|
Chris@16
|
84 template<class Dim, class System>
|
Chris@16
|
85 struct reduce_unit<unit<Dim, System> >
|
Chris@16
|
86 {
|
Chris@16
|
87 typedef unit<
|
Chris@16
|
88 Dim,
|
Chris@16
|
89 typename detail::make_heterogeneous_system<
|
Chris@16
|
90 Dim,
|
Chris@16
|
91 System
|
Chris@16
|
92 >::type
|
Chris@16
|
93 > type;
|
Chris@16
|
94 };
|
Chris@16
|
95
|
Chris@16
|
96 /// INTERNAL ONLY
|
Chris@16
|
97 template<class S1,class S2>
|
Chris@16
|
98 struct is_implicitly_convertible :
|
Chris@16
|
99 boost::is_same<typename reduce_unit<S1>::type, typename reduce_unit<S2>::type>
|
Chris@16
|
100 { };
|
Chris@16
|
101
|
Chris@16
|
102 /// unit unary plus typeof helper
|
Chris@16
|
103 /// INTERNAL ONLY
|
Chris@16
|
104 template<class Dim,class System>
|
Chris@16
|
105 struct unary_plus_typeof_helper< unit<Dim,System> >
|
Chris@16
|
106 {
|
Chris@16
|
107 typedef unit<Dim,System> type;
|
Chris@16
|
108 };
|
Chris@16
|
109
|
Chris@16
|
110 /// unit unary minus typeof helper
|
Chris@16
|
111 /// INTERNAL ONLY
|
Chris@16
|
112 template<class Dim,class System>
|
Chris@16
|
113 struct unary_minus_typeof_helper< unit<Dim,System> >
|
Chris@16
|
114 {
|
Chris@16
|
115 typedef unit<Dim,System> type;
|
Chris@16
|
116 };
|
Chris@16
|
117
|
Chris@16
|
118 /// unit add typeof helper
|
Chris@16
|
119 /// INTERNAL ONLY
|
Chris@16
|
120 template<class Dim,
|
Chris@16
|
121 class System>
|
Chris@16
|
122 struct add_typeof_helper< unit<Dim,System>,unit<Dim,System> >
|
Chris@16
|
123 {
|
Chris@16
|
124 typedef unit<Dim,System> type;
|
Chris@16
|
125 };
|
Chris@16
|
126
|
Chris@16
|
127 /// unit subtract typeof helper
|
Chris@16
|
128 /// INTERNAL ONLY
|
Chris@16
|
129 template<class Dim,
|
Chris@16
|
130 class System>
|
Chris@16
|
131 struct subtract_typeof_helper< unit<Dim,System>,unit<Dim,System> >
|
Chris@16
|
132 {
|
Chris@16
|
133 typedef unit<Dim,System> type;
|
Chris@16
|
134 };
|
Chris@16
|
135
|
Chris@16
|
136 /// unit multiply typeof helper for two identical homogeneous systems
|
Chris@16
|
137 /// INTERNAL ONLY
|
Chris@16
|
138 template<class Dim1,
|
Chris@16
|
139 class Dim2,
|
Chris@16
|
140 class System>
|
Chris@16
|
141 struct multiply_typeof_helper< unit<Dim1,homogeneous_system<System> >,
|
Chris@16
|
142 unit<Dim2,homogeneous_system<System> > >
|
Chris@16
|
143 {
|
Chris@16
|
144 typedef unit<typename mpl::times<Dim1,Dim2>::type,homogeneous_system<System> > type;
|
Chris@16
|
145 };
|
Chris@16
|
146
|
Chris@16
|
147 /// unit multiply typeof helper for two different homogeneous systems
|
Chris@16
|
148 /// INTERNAL ONLY
|
Chris@16
|
149 template<class Dim1,
|
Chris@16
|
150 class Dim2,
|
Chris@16
|
151 class System1,
|
Chris@16
|
152 class System2>
|
Chris@16
|
153 struct multiply_typeof_helper< unit<Dim1,homogeneous_system<System1> >,
|
Chris@16
|
154 unit<Dim2,homogeneous_system<System2> > >
|
Chris@16
|
155 {
|
Chris@16
|
156 typedef unit<
|
Chris@16
|
157 typename mpl::times<Dim1,Dim2>::type,
|
Chris@16
|
158 typename detail::multiply_systems<
|
Chris@16
|
159 typename detail::make_heterogeneous_system<Dim1, System1>::type,
|
Chris@16
|
160 typename detail::make_heterogeneous_system<Dim2, System2>::type
|
Chris@16
|
161 >::type
|
Chris@16
|
162 > type;
|
Chris@16
|
163 };
|
Chris@16
|
164
|
Chris@16
|
165 /// unit multiply typeof helper for a heterogeneous and a homogeneous system
|
Chris@16
|
166 /// INTERNAL ONLY
|
Chris@16
|
167 template<class Dim1,
|
Chris@16
|
168 class Dim2,
|
Chris@16
|
169 class System1,
|
Chris@16
|
170 class System2>
|
Chris@16
|
171 struct multiply_typeof_helper< unit<Dim1,heterogeneous_system<System1> >,
|
Chris@16
|
172 unit<Dim2,homogeneous_system<System2> > >
|
Chris@16
|
173 {
|
Chris@16
|
174 typedef unit<
|
Chris@16
|
175 typename mpl::times<Dim1,Dim2>::type,
|
Chris@16
|
176 typename detail::multiply_systems<
|
Chris@16
|
177 heterogeneous_system<System1>,
|
Chris@16
|
178 typename detail::make_heterogeneous_system<Dim2, System2>::type
|
Chris@16
|
179 >::type
|
Chris@16
|
180 > type;
|
Chris@16
|
181 };
|
Chris@16
|
182
|
Chris@16
|
183 /// unit multiply typeof helper for a homogeneous and a heterogeneous system
|
Chris@16
|
184 /// INTERNAL ONLY
|
Chris@16
|
185 template<class Dim1,
|
Chris@16
|
186 class Dim2,
|
Chris@16
|
187 class System1,
|
Chris@16
|
188 class System2>
|
Chris@16
|
189 struct multiply_typeof_helper< unit<Dim1,homogeneous_system<System1> >,
|
Chris@16
|
190 unit<Dim2,heterogeneous_system<System2> > >
|
Chris@16
|
191 {
|
Chris@16
|
192 typedef unit<
|
Chris@16
|
193 typename mpl::times<Dim1,Dim2>::type,
|
Chris@16
|
194 typename detail::multiply_systems<
|
Chris@16
|
195 typename detail::make_heterogeneous_system<Dim1, System1>::type,
|
Chris@16
|
196 heterogeneous_system<System2>
|
Chris@16
|
197 >::type
|
Chris@16
|
198 > type;
|
Chris@16
|
199 };
|
Chris@16
|
200
|
Chris@16
|
201 /// unit multiply typeof helper for two heterogeneous systems
|
Chris@16
|
202 /// INTERNAL ONLY
|
Chris@16
|
203 template<class Dim1,
|
Chris@16
|
204 class Dim2,
|
Chris@16
|
205 class System1,
|
Chris@16
|
206 class System2>
|
Chris@16
|
207 struct multiply_typeof_helper< unit<Dim1,heterogeneous_system<System1> >,
|
Chris@16
|
208 unit<Dim2,heterogeneous_system<System2> > >
|
Chris@16
|
209 {
|
Chris@16
|
210 typedef unit<
|
Chris@16
|
211 typename mpl::times<Dim1,Dim2>::type,
|
Chris@16
|
212 typename detail::multiply_systems<
|
Chris@16
|
213 heterogeneous_system<System1>,
|
Chris@16
|
214 heterogeneous_system<System2>
|
Chris@16
|
215 >::type
|
Chris@16
|
216 > type;
|
Chris@16
|
217 };
|
Chris@16
|
218
|
Chris@16
|
219 /// unit divide typeof helper for two identical homogeneous systems
|
Chris@16
|
220 /// INTERNAL ONLY
|
Chris@16
|
221 template<class Dim1,
|
Chris@16
|
222 class Dim2,
|
Chris@16
|
223 class System>
|
Chris@16
|
224 struct divide_typeof_helper< unit<Dim1,homogeneous_system<System> >,
|
Chris@16
|
225 unit<Dim2,homogeneous_system<System> > >
|
Chris@16
|
226 {
|
Chris@16
|
227 typedef unit<typename mpl::divides<Dim1,Dim2>::type,homogeneous_system<System> > type;
|
Chris@16
|
228 };
|
Chris@16
|
229
|
Chris@16
|
230 /// unit divide typeof helper for two different homogeneous systems
|
Chris@16
|
231 /// INTERNAL ONLY
|
Chris@16
|
232 template<class Dim1,
|
Chris@16
|
233 class Dim2,
|
Chris@16
|
234 class System1,
|
Chris@16
|
235 class System2>
|
Chris@16
|
236 struct divide_typeof_helper< unit<Dim1,homogeneous_system<System1> >,
|
Chris@16
|
237 unit<Dim2,homogeneous_system<System2> > >
|
Chris@16
|
238 {
|
Chris@16
|
239 typedef unit<
|
Chris@16
|
240 typename mpl::divides<Dim1,Dim2>::type,
|
Chris@16
|
241 typename detail::divide_systems<
|
Chris@16
|
242 typename detail::make_heterogeneous_system<Dim1, System1>::type,
|
Chris@16
|
243 typename detail::make_heterogeneous_system<Dim2, System2>::type
|
Chris@16
|
244 >::type
|
Chris@16
|
245 > type;
|
Chris@16
|
246 };
|
Chris@16
|
247
|
Chris@16
|
248 /// unit divide typeof helper for a heterogeneous and a homogeneous system
|
Chris@16
|
249 /// INTERNAL ONLY
|
Chris@16
|
250 template<class Dim1,
|
Chris@16
|
251 class Dim2,
|
Chris@16
|
252 class System1,
|
Chris@16
|
253 class System2>
|
Chris@16
|
254 struct divide_typeof_helper< unit<Dim1,heterogeneous_system<System1> >,
|
Chris@16
|
255 unit<Dim2,homogeneous_system<System2> > >
|
Chris@16
|
256 {
|
Chris@16
|
257 typedef unit<
|
Chris@16
|
258 typename mpl::divides<Dim1,Dim2>::type,
|
Chris@16
|
259 typename detail::divide_systems<
|
Chris@16
|
260 heterogeneous_system<System1>,
|
Chris@16
|
261 typename detail::make_heterogeneous_system<Dim2, System2>::type
|
Chris@16
|
262 >::type
|
Chris@16
|
263 > type;
|
Chris@16
|
264 };
|
Chris@16
|
265
|
Chris@16
|
266 /// unit divide typeof helper for a homogeneous and a heterogeneous system
|
Chris@16
|
267 /// INTERNAL ONLY
|
Chris@16
|
268 template<class Dim1,
|
Chris@16
|
269 class Dim2,
|
Chris@16
|
270 class System1,
|
Chris@16
|
271 class System2>
|
Chris@16
|
272 struct divide_typeof_helper< unit<Dim1,homogeneous_system<System1> >,
|
Chris@16
|
273 unit<Dim2,heterogeneous_system<System2> > >
|
Chris@16
|
274 {
|
Chris@16
|
275 typedef unit<
|
Chris@16
|
276 typename mpl::divides<Dim1,Dim2>::type,
|
Chris@16
|
277 typename detail::divide_systems<
|
Chris@16
|
278 typename detail::make_heterogeneous_system<Dim1, System1>::type,
|
Chris@16
|
279 heterogeneous_system<System2>
|
Chris@16
|
280 >::type
|
Chris@16
|
281 > type;
|
Chris@16
|
282 };
|
Chris@16
|
283
|
Chris@16
|
284 /// unit divide typeof helper for two heterogeneous systems
|
Chris@16
|
285 /// INTERNAL ONLY
|
Chris@16
|
286 template<class Dim1,
|
Chris@16
|
287 class Dim2,
|
Chris@16
|
288 class System1,
|
Chris@16
|
289 class System2>
|
Chris@16
|
290 struct divide_typeof_helper< unit<Dim1,heterogeneous_system<System1> >,
|
Chris@16
|
291 unit<Dim2,heterogeneous_system<System2> > >
|
Chris@16
|
292 {
|
Chris@16
|
293 typedef unit<
|
Chris@16
|
294 typename mpl::divides<Dim1,Dim2>::type,
|
Chris@16
|
295 typename detail::divide_systems<
|
Chris@16
|
296 heterogeneous_system<System1>,
|
Chris@16
|
297 heterogeneous_system<System2>
|
Chris@16
|
298 >::type
|
Chris@16
|
299 > type;
|
Chris@16
|
300 };
|
Chris@16
|
301
|
Chris@16
|
302 /// raise unit to a @c static_rational power
|
Chris@16
|
303 template<class Dim,class System,long N,long D>
|
Chris@16
|
304 struct power_typeof_helper<unit<Dim,System>,static_rational<N,D> >
|
Chris@16
|
305 {
|
Chris@16
|
306 typedef unit<typename static_power<Dim,static_rational<N,D> >::type,typename static_power<System, static_rational<N,D> >::type> type;
|
Chris@16
|
307
|
Chris@16
|
308 static type value(const unit<Dim,System>&)
|
Chris@16
|
309 {
|
Chris@16
|
310 return type();
|
Chris@16
|
311 }
|
Chris@16
|
312 };
|
Chris@16
|
313
|
Chris@16
|
314 /// take the @c static_rational root of a unit
|
Chris@16
|
315 template<class Dim,class System,long N,long D>
|
Chris@16
|
316 struct root_typeof_helper<unit<Dim,System>,static_rational<N,D> >
|
Chris@16
|
317 {
|
Chris@16
|
318 typedef unit<typename static_root<Dim,static_rational<N,D> >::type,typename static_root<System, static_rational<N,D> >::type> type;
|
Chris@16
|
319
|
Chris@16
|
320 static type value(const unit<Dim,System>&)
|
Chris@16
|
321 {
|
Chris@16
|
322 return type();
|
Chris@16
|
323 }
|
Chris@16
|
324 };
|
Chris@16
|
325
|
Chris@16
|
326 /// unit runtime unary plus
|
Chris@16
|
327 template<class Dim,class System>
|
Chris@16
|
328 typename unary_plus_typeof_helper< unit<Dim,System> >::type
|
Chris@16
|
329 operator+(const unit<Dim,System>&)
|
Chris@16
|
330 {
|
Chris@16
|
331 typedef typename unary_plus_typeof_helper< unit<Dim,System> >::type type;
|
Chris@16
|
332
|
Chris@16
|
333 return type();
|
Chris@16
|
334 }
|
Chris@16
|
335
|
Chris@16
|
336 /// unit runtime unary minus
|
Chris@16
|
337 template<class Dim,class System>
|
Chris@16
|
338 typename unary_minus_typeof_helper< unit<Dim,System> >::type
|
Chris@16
|
339 operator-(const unit<Dim,System>&)
|
Chris@16
|
340 {
|
Chris@16
|
341 typedef typename unary_minus_typeof_helper< unit<Dim,System> >::type type;
|
Chris@16
|
342
|
Chris@16
|
343 return type();
|
Chris@16
|
344 }
|
Chris@16
|
345
|
Chris@16
|
346 /// runtime add two units
|
Chris@16
|
347 template<class Dim1,
|
Chris@16
|
348 class Dim2,
|
Chris@16
|
349 class System1,
|
Chris@16
|
350 class System2>
|
Chris@16
|
351 typename add_typeof_helper< unit<Dim1,System1>,
|
Chris@16
|
352 unit<Dim2,System2> >::type
|
Chris@16
|
353 operator+(const unit<Dim1,System1>&,const unit<Dim2,System2>&)
|
Chris@16
|
354 {
|
Chris@16
|
355 BOOST_STATIC_ASSERT((boost::is_same<System1,System2>::value == true));
|
Chris@16
|
356
|
Chris@16
|
357 typedef System1 system_type;
|
Chris@16
|
358 typedef typename add_typeof_helper< unit<Dim1,system_type>,
|
Chris@16
|
359 unit<Dim2,system_type> >::type type;
|
Chris@16
|
360
|
Chris@16
|
361 return type();
|
Chris@16
|
362 }
|
Chris@16
|
363
|
Chris@16
|
364 /// runtime subtract two units
|
Chris@16
|
365 template<class Dim1,
|
Chris@16
|
366 class Dim2,
|
Chris@16
|
367 class System1,
|
Chris@16
|
368 class System2>
|
Chris@16
|
369 typename subtract_typeof_helper< unit<Dim1,System1>,
|
Chris@16
|
370 unit<Dim2,System2> >::type
|
Chris@16
|
371 operator-(const unit<Dim1,System1>&,const unit<Dim2,System2>&)
|
Chris@16
|
372 {
|
Chris@16
|
373 BOOST_STATIC_ASSERT((boost::is_same<System1,System2>::value == true));
|
Chris@16
|
374
|
Chris@16
|
375 typedef System1 system_type;
|
Chris@16
|
376 typedef typename subtract_typeof_helper< unit<Dim1,system_type>,
|
Chris@16
|
377 unit<Dim2,system_type> >::type type;
|
Chris@16
|
378
|
Chris@16
|
379 return type();
|
Chris@16
|
380 }
|
Chris@16
|
381
|
Chris@16
|
382 /// runtime multiply two units
|
Chris@16
|
383 template<class Dim1,
|
Chris@16
|
384 class Dim2,
|
Chris@16
|
385 class System1,
|
Chris@16
|
386 class System2>
|
Chris@16
|
387 typename multiply_typeof_helper< unit<Dim1,System1>,
|
Chris@16
|
388 unit<Dim2,System2> >::type
|
Chris@16
|
389 operator*(const unit<Dim1,System1>&,const unit<Dim2,System2>&)
|
Chris@16
|
390 {
|
Chris@16
|
391 typedef typename multiply_typeof_helper< unit<Dim1,System1>,
|
Chris@16
|
392 unit<Dim2,System2> >::type type;
|
Chris@16
|
393
|
Chris@16
|
394 return type();
|
Chris@16
|
395 }
|
Chris@16
|
396
|
Chris@16
|
397 /// runtime divide two units
|
Chris@16
|
398 template<class Dim1,
|
Chris@16
|
399 class Dim2,
|
Chris@16
|
400 class System1,
|
Chris@16
|
401 class System2>
|
Chris@16
|
402 typename divide_typeof_helper< unit<Dim1,System1>,
|
Chris@16
|
403 unit<Dim2,System2> >::type
|
Chris@16
|
404 operator/(const unit<Dim1,System1>&,const unit<Dim2,System2>&)
|
Chris@16
|
405 {
|
Chris@16
|
406 typedef typename divide_typeof_helper< unit<Dim1,System1>,
|
Chris@16
|
407 unit<Dim2,System2> >::type type;
|
Chris@16
|
408
|
Chris@16
|
409 return type();
|
Chris@16
|
410 }
|
Chris@16
|
411
|
Chris@16
|
412 /// unit runtime @c operator==
|
Chris@16
|
413 template<class Dim1,
|
Chris@16
|
414 class Dim2,
|
Chris@16
|
415 class System1,
|
Chris@16
|
416 class System2>
|
Chris@16
|
417 inline
|
Chris@16
|
418 bool
|
Chris@16
|
419 operator==(const unit<Dim1,System1>&,const unit<Dim2,System2>&)
|
Chris@16
|
420 {
|
Chris@16
|
421 return boost::is_same<typename reduce_unit<unit<Dim1,System1> >::type, typename reduce_unit<unit<Dim2,System2> >::type>::value;
|
Chris@16
|
422 }
|
Chris@16
|
423
|
Chris@16
|
424 /// unit runtime @c operator!=
|
Chris@16
|
425 template<class Dim1,
|
Chris@16
|
426 class Dim2,
|
Chris@16
|
427 class System1,
|
Chris@16
|
428 class System2>
|
Chris@16
|
429 inline
|
Chris@16
|
430 bool
|
Chris@16
|
431 operator!=(const unit<Dim1,System1>&,const unit<Dim2,System2>&)
|
Chris@16
|
432 {
|
Chris@16
|
433 return !boost::is_same<typename reduce_unit<unit<Dim1,System1> >::type, typename reduce_unit<unit<Dim2,System2> >::type>::value;
|
Chris@16
|
434 }
|
Chris@16
|
435
|
Chris@16
|
436 } // namespace units
|
Chris@16
|
437
|
Chris@16
|
438 } // namespace boost
|
Chris@16
|
439
|
Chris@16
|
440 #endif // BOOST_UNITS_UNIT_HPP
|