Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/fusion/support/deduce.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/fusion/support/deduce.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,117 @@ +/*============================================================================= + Copyright (c) 2007 Tobias Schwinger + + 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). +==============================================================================*/ + +#if !defined(BOOST_FUSION_SUPPORT_DEDUCE_HPP_INCLUDED) +#define BOOST_FUSION_SUPPORT_DEDUCE_HPP_INCLUDED + +#include <boost/ref.hpp> + +namespace boost { namespace fusion { namespace traits +{ + template <typename T> struct deduce; + + //----- ---- --- -- - - - - + + // Non-references pass unchanged + + template <typename T> + struct deduce + { + typedef T type; + }; + + template <typename T> + struct deduce<T const> + { + typedef T type; + }; + + template <typename T> + struct deduce<T volatile> + { + typedef T type; + }; + + template <typename T> + struct deduce<T const volatile> + { + typedef T type; + }; + + // Keep references on mutable LValues + + template <typename T> + struct deduce<T &> + { + typedef T & type; + }; + + template <typename T> + struct deduce<T volatile&> + { + typedef T volatile& type; + }; + + // Store away potential RValues + + template <typename T> + struct deduce<T const&> + { + typedef T type; + }; + + template <typename T> + struct deduce<T const volatile&> + { + typedef T type; + }; + + // Unwrap Boost.RefS (referencee cv is deduced) + + template <typename T> + struct deduce<reference_wrapper<T> & > + { + typedef T& type; + }; + + template <typename T> + struct deduce<reference_wrapper<T> const & > + { + typedef T& type; + }; + + // Keep references on arrays, even if const + + template <typename T, int N> + struct deduce<T(&)[N]> + { + typedef T(&type)[N]; + }; + + template <typename T, int N> + struct deduce<volatile T(&)[N]> + { + typedef volatile T(&type)[N]; + }; + + template <typename T, int N> + struct deduce<const T(&)[N]> + { + typedef const T(&type)[N]; + }; + + template <typename T, int N> + struct deduce<const volatile T(&)[N]> + { + typedef const volatile T(&type)[N]; + }; + +}}} + +#endif +