LCOV - code coverage report
Current view: top level - usr/include/boost/type_traits - integral_constant.hpp (source / functions) Hit Total Coverage
Test: ROSE Lines: 1 2 50.0 %
Date: 2022-12-08 13:48:47 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : //  (C) Copyright John Maddock 2015. 
       2             : //  Use, modification and distribution are subject to the 
       3             : //  Boost Software License, Version 1.0. (See accompanying file 
       4             : //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       5             : 
       6             : #ifndef BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP
       7             : #define BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP
       8             : 
       9             : #include <boost/config.hpp>
      10             : #include <boost/detail/workaround.hpp>
      11             : 
      12             : #if (BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
      13             :    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
      14             :    || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \
      15             :    || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
      16             :    || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) )\
      17             :    || defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE)
      18             : 
      19             : 
      20             : namespace boost{
      21             :    namespace mpl
      22             :    {
      23             :       template <bool B> struct bool_;
      24             :       template <class I, I val> struct integral_c;
      25             :       struct integral_c_tag;
      26             :    }
      27             : }
      28             : 
      29             : #else
      30             : 
      31             : namespace mpl_{
      32             : 
      33             :    template <bool B> struct bool_;
      34             :    template <class I, I val> struct integral_c;
      35             :    struct integral_c_tag;
      36             : }
      37             : 
      38             : namespace boost
      39             : {
      40             :    namespace mpl
      41             :    {
      42             :       using ::mpl_::bool_;
      43             :       using ::mpl_::integral_c;
      44             :       using ::mpl_::integral_c_tag;
      45             :    }
      46             : }
      47             : 
      48             : #endif
      49             : 
      50             : namespace boost{
      51             : 
      52             :    template <class T, T val>
      53             :    struct integral_constant
      54             :    {
      55             :       typedef mpl::integral_c_tag tag;
      56             :       typedef T value_type;
      57             :       typedef integral_constant<T, val> type;
      58             :       static const T value = val;
      59             : 
      60             :       operator const mpl::integral_c<T, val>& ()const
      61             :       {
      62             :          static const char data[sizeof(long)] = { 0 };
      63             :          static const void* pdata = data;
      64             :          return *(reinterpret_cast<const mpl::integral_c<T, val>*>(pdata));
      65             :       }
      66             :       BOOST_CONSTEXPR operator T()const { return val; }
      67             :    };
      68             : 
      69             :    template <class T, T val>
      70             :    T const integral_constant<T, val>::value;
      71             :       
      72             :    template <bool val>
      73             :    struct integral_constant<bool, val>
      74             :    {
      75             :       typedef mpl::integral_c_tag tag;
      76             :       typedef bool value_type;
      77             :       typedef integral_constant<bool, val> type;
      78             :       static const bool value = val;
      79             : 
      80       16376 :       operator const mpl::bool_<val>& ()const
      81             :       {
      82             :          static const char data[sizeof(long)] = { 0 };
      83             :          static const void* pdata = data;
      84           0 :          return *(reinterpret_cast<const mpl::bool_<val>*>(pdata));
      85             :       }
      86             :       BOOST_CONSTEXPR operator bool()const { return val; }
      87             :    };
      88             : 
      89             :    template <bool val>
      90             :    bool const integral_constant<bool, val>::value;
      91             : 
      92             :    typedef integral_constant<bool, true> true_type;
      93             :    typedef integral_constant<bool, false> false_type;
      94             : 
      95             : }
      96             : 
      97             : #endif

Generated by: LCOV version 1.14