mirror of
https://github.com/yuzu-emu/ext-boost.git
synced 2024-12-23 04:15:36 +00:00
67 lines
1.5 KiB
C++
67 lines
1.5 KiB
C++
|
// Boost.Range library
|
||
|
//
|
||
|
// Copyright Neil Groves 2014.
|
||
|
//
|
||
|
// 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).
|
||
|
//
|
||
|
// For more information, see http://www.boost.org/libs/range/
|
||
|
//
|
||
|
#ifndef BOOST_RANGE_DETAIL_HAS_MEMBER_SIZE_HPP
|
||
|
#define BOOST_RANGE_DETAIL_HAS_MEMBER_SIZE_HPP
|
||
|
|
||
|
#include <boost/type_traits/is_class.hpp>
|
||
|
#include <boost/type_traits/is_member_function_pointer.hpp>
|
||
|
#include <boost/mpl/and.hpp>
|
||
|
#include <boost/mpl/bool.hpp>
|
||
|
#include <boost/cstdint.hpp>
|
||
|
|
||
|
namespace boost
|
||
|
{
|
||
|
namespace range_detail
|
||
|
{
|
||
|
|
||
|
template<class T>
|
||
|
class has_member_size_impl
|
||
|
{
|
||
|
private:
|
||
|
template<class U, U>
|
||
|
class check
|
||
|
{
|
||
|
};
|
||
|
|
||
|
template<class C>
|
||
|
static boost::uint8_t f(check<std::size_t(C::*)(void) const, &C::size>*);
|
||
|
|
||
|
template<class C>
|
||
|
static boost::uint16_t f(...);
|
||
|
|
||
|
public:
|
||
|
static const bool value =
|
||
|
(sizeof(f<T>(0)) == sizeof(boost::uint8_t));
|
||
|
|
||
|
typedef typename mpl::if_c<
|
||
|
(sizeof(f<T>(0)) == sizeof(boost::uint8_t)),
|
||
|
mpl::true_,
|
||
|
mpl::false_
|
||
|
>::type type;
|
||
|
};
|
||
|
|
||
|
template<class T>
|
||
|
struct has_member_size
|
||
|
{
|
||
|
typedef typename mpl::and_<
|
||
|
typename is_class<T>::type,
|
||
|
typename has_member_size_impl<const T>::type
|
||
|
>::type type;
|
||
|
|
||
|
static const bool value =
|
||
|
is_class<T>::value && has_member_size_impl<const T>::value;
|
||
|
};
|
||
|
|
||
|
} // namespace range_detail
|
||
|
}// namespace boost
|
||
|
|
||
|
#endif // include guard
|