//  (C) Copyright John Maddock and Steve Cleary 2000.
//  Use, modification and distribution are subject to the Boost Software License,
//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
//  http://www.boost.org/LICENSE_1_0.txt).
//
//  See http://www.boost.org/libs/type_traits for most recent version including documentation.

#ifndef NDNBOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED
#define NDNBOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED

#include <ndnboost/config.hpp>

namespace ndnboost {
namespace type_traits {

template <bool b>
struct ice_not
{
    NDNBOOST_STATIC_CONSTANT(bool, value = true);
};

template <>
struct ice_not<true>
{
    NDNBOOST_STATIC_CONSTANT(bool, value = false);
};

} // namespace type_traits
} // namespace ndnboost

#endif // NDNBOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED
