Chris@16: // Boost.Units - A C++ library for zero-overhead dimensional analysis and Chris@16: // unit/quantity manipulation and conversion Chris@16: // Chris@16: // Copyright (C) 2003-2008 Matthias Christian Schabel Chris@16: // Copyright (C) 2007-2008 Steven Watanabe Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_UNITS_DETAIL_DIMENSIONLESS_UNIT_HPP Chris@16: #define BOOST_UNITS_DETAIL_DIMENSIONLESS_UNIT_HPP Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace units { Chris@16: Chris@16: template Chris@16: struct heterogeneous_system; Chris@16: Chris@16: template Chris@16: struct homogeneous_system; Chris@16: Chris@16: template Chris@16: struct heterogeneous_system_impl; Chris@16: Chris@16: typedef boost::units::heterogeneous_system< Chris@16: boost::units::heterogeneous_system_impl< Chris@16: boost::units::dimensionless_type, Chris@16: boost::units::dimensionless_type, Chris@16: boost::units::dimensionless_type Chris@16: > Chris@16: > heterogeneous_dimensionless_system; Chris@16: Chris@16: namespace detail { Chris@16: Chris@16: template Chris@16: struct void_if_dimensionless { Chris@16: typedef int type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct void_if_dimensionless > { Chris@16: typedef void type; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct void_if_dimensionless { Chris@16: typedef void type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct void_if_heterogeneous { Chris@16: typedef void type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct void_if_heterogeneous::type> { Chris@16: typedef int type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_dimensionless_system : mpl::false_ {}; Chris@16: Chris@16: template Chris@16: struct is_dimensionless_system::type> : mpl::true_ {}; Chris@16: Chris@16: #define BOOST_UNITS_DIMENSIONLESS_UNIT(T)\ Chris@16: boost::units::unit<\ Chris@16: boost::units::dimensionless_type,\ Chris@16: T,\ Chris@16: typename ::boost::units::detail::void_if_dimensionless::type\ Chris@16: > Chris@16: Chris@16: #define BOOST_UNITS_HETEROGENEOUS_DIMENSIONLESS_UNIT(T)\ Chris@16: boost::units::unit<\ Chris@16: boost::units::dimensionless_type,\ Chris@16: T,\ Chris@16: typename ::boost::units::detail::void_if_heterogeneous::type\ Chris@16: > Chris@16: Chris@16: } Chris@16: } Chris@16: } Chris@16: Chris@16: #endif