Merge changes from Trunk.

Fixes #5790.

[SVN r80433]
This commit is contained in:
John Maddock 2012-09-07 08:49:11 +00:00
parent d63444f22e
commit c0cca9e8cc

View File

@ -24,6 +24,7 @@
#include <cstddef> #include <cstddef>
#include <boost/type_traits/is_arithmetic.hpp> #include <boost/type_traits/is_arithmetic.hpp>
#include <boost/type_traits/is_enum.hpp>
#include <boost/type_traits/is_pointer.hpp> #include <boost/type_traits/is_pointer.hpp>
#include <boost/detail/workaround.hpp> #include <boost/detail/workaround.hpp>
@ -43,20 +44,26 @@ struct ct_imp2<T, true>
typedef const T param_type; typedef const T param_type;
}; };
template <typename T, bool isp, bool b1> template <typename T, bool isp, bool b1, bool b2>
struct ct_imp struct ct_imp
{ {
typedef const T& param_type; typedef const T& param_type;
}; };
template <typename T, bool isp> template <typename T, bool isp, bool b2>
struct ct_imp<T, isp, true> struct ct_imp<T, isp, true, b2>
{ {
typedef typename ct_imp2<T, sizeof(T) <= sizeof(void*)>::param_type param_type; typedef typename ct_imp2<T, sizeof(T) <= sizeof(void*)>::param_type param_type;
}; };
template <typename T, bool b1> template <typename T, bool isp, bool b1>
struct ct_imp<T, true, b1> struct ct_imp<T, isp, b1, true>
{
typedef typename ct_imp2<T, sizeof(T) <= sizeof(void*)>::param_type param_type;
};
template <typename T, bool b1, bool b2>
struct ct_imp<T, true, b1, b2>
{ {
typedef const T param_type; typedef const T param_type;
}; };
@ -79,7 +86,8 @@ public:
typedef typename boost::detail::ct_imp< typedef typename boost::detail::ct_imp<
T, T,
::boost::is_pointer<T>::value, ::boost::is_pointer<T>::value,
::boost::is_arithmetic<T>::value ::boost::is_arithmetic<T>::value,
::boost::is_enum<T>::value
>::param_type param_type; >::param_type param_type;
}; };