From 8286ac511144e4f17d34eac9affb97e50646344a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Wed, 23 Jul 2014 15:25:44 +0200 Subject: Imported Upstream version 4.0.0 --- .../cutl/details/boost/type_traits/is_volatile.hpp | 152 +++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 libcutl/cutl/details/boost/type_traits/is_volatile.hpp (limited to 'libcutl/cutl/details/boost/type_traits/is_volatile.hpp') diff --git a/libcutl/cutl/details/boost/type_traits/is_volatile.hpp b/libcutl/cutl/details/boost/type_traits/is_volatile.hpp new file mode 100644 index 0000000..32e8403 --- /dev/null +++ b/libcutl/cutl/details/boost/type_traits/is_volatile.hpp @@ -0,0 +1,152 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, +// Howard Hinnant and John Maddock 2000. +// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001 + +// 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. + +// Fixed is_pointer, is_reference, is_const, is_volatile, is_same, +// is_member_pointer based on the Simulated Partial Specialization work +// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or +// http://groups.yahoo.com/group/boost/message/5441 +// Some workarounds in here use ideas suggested from "Generic: +// Mappings between Types and Values" +// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html). + + +#ifndef BOOST_TT_IS_VOLATILE_HPP_INCLUDED +#define BOOST_TT_IS_VOLATILE_HPP_INCLUDED + +#include +#include + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +# include +# if BOOST_WORKAROUND(BOOST_MSVC, < 1400) +# include +# endif +#else +# include +# include +# include +# include +#endif + +// should be the last #include +#include + +namespace cutl_details_boost { + +namespace detail{ +template +struct is_volatile_rval_filter +{ +#if BOOST_WORKAROUND(BOOST_MSVC, < 1400) + BOOST_STATIC_CONSTANT(bool, value = ::cutl_details_boost::detail::cv_traits_imp::type*>::is_volatile); +#else + BOOST_STATIC_CONSTANT(bool, value = ::cutl_details_boost::detail::cv_traits_imp::is_volatile); +#endif +}; +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES +// +// We can't filter out rvalue_references at the same level as +// references or we get ambiguities from msvc: +// +template +struct is_volatile_rval_filter +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; +#endif +} + +#if defined( __CODEGEARC__ ) +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,__is_volatile(T)) +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +//* is a type T declared volatile - is_volatile +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::cutl_details_boost::detail::is_volatile_rval_filter::value) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T&,false) + +#if defined(BOOST_ILLEGAL_CV_REFERENCES) +// these are illegal specialisations; cv-qualifies applied to +// references have no effect according to [8.3.2p1], +// C++ Builder requires them though as it treats cv-qualified +// references as distinct types... +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& const,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& const volatile,false) +#endif + +#else + +namespace detail { + +using ::cutl_details_boost::type_traits::yes_type; +using ::cutl_details_boost::type_traits::no_type; + +yes_type is_volatile_tester(void const volatile*); +no_type is_volatile_tester(void const*); + +template +struct is_volatile_helper + : public ::cutl_details_boost::type_traits::false_result +{ +}; + +template <> +struct is_volatile_helper +{ + template struct result_ + { + static T* t; + BOOST_STATIC_CONSTANT(bool, value = ( + sizeof(cutl_details_boost::detail::yes_type) == sizeof(cutl_details_boost::detail::is_volatile_tester(t)) + )); + }; +}; + +template <> +struct is_volatile_helper +{ + template struct result_ + { + static T t; + BOOST_STATIC_CONSTANT(bool, value = ( + sizeof(cutl_details_boost::detail::yes_type) == sizeof(cutl_details_boost::detail::is_volatile_tester(&t)) + )); + }; +}; + +template +struct is_volatile_impl + : public is_volatile_helper< + is_reference::value + , is_array::value + >::template result_ +{ +}; + +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void volatile,true) +BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void const volatile,true) +#endif + +} // namespace detail + +//* is a type T declared volatile - is_volatile +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::cutl_details_boost::detail::is_volatile_impl::value) + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace cutl_details_boost + +#include + +#endif // BOOST_TT_IS_VOLATILE_HPP_INCLUDED -- cgit v1.2.3