forked from boostorg/tuple
fixes in element<> for BCB compilers, with help from Tobias Schwinger
[SVN r25763]
This commit is contained in:
@ -135,6 +135,8 @@ struct get_class<0> {
|
|||||||
// Nth element ot T, first element is at index 0
|
// Nth element ot T, first element is at index 0
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef BOOST_NO_CV_SPECIALIZATIONS
|
||||||
|
|
||||||
template<int N, class T>
|
template<int N, class T>
|
||||||
struct element
|
struct element
|
||||||
{
|
{
|
||||||
@ -156,14 +158,69 @@ private:
|
|||||||
typedef typename T::tail_type Next;
|
typedef typename T::tail_type Next;
|
||||||
typedef typename element<N-1, Next>::type unqualified_type;
|
typedef typename element<N-1, Next>::type unqualified_type;
|
||||||
public:
|
public:
|
||||||
|
#if BOOST_WORKAROUND(__BORLANDC__,<0x600)
|
||||||
|
typedef const unqualified_type type;
|
||||||
|
#else
|
||||||
typedef typename boost::add_const<unqualified_type>::type type;
|
typedef typename boost::add_const<unqualified_type>::type type;
|
||||||
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
template<class T>
|
template<class T>
|
||||||
struct element<0,const T>
|
struct element<0,const T>
|
||||||
{
|
{
|
||||||
|
#if BOOST_WORKAROUND(__BORLANDC__,<0x600)
|
||||||
|
typedef const typename T::head_type type;
|
||||||
|
#else
|
||||||
typedef typename boost::add_const<typename T::head_type>::type type;
|
typedef typename boost::add_const<typename T::head_type>::type type;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#else // def BOOST_NO_CV_SPECIALIZATIONS
|
||||||
|
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template<int N, class T, bool IsConst>
|
||||||
|
struct element_impl
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
typedef typename T::tail_type Next;
|
||||||
|
public:
|
||||||
|
typedef typename element_impl<N-1, Next, IsConst>::type type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<int N, class T>
|
||||||
|
struct element_impl<N, T, true /* IsConst */>
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
typedef typename T::tail_type Next;
|
||||||
|
public:
|
||||||
|
typedef const typename element_impl<N-1, Next, true>::type type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct element_impl<0, T, false /* IsConst */>
|
||||||
|
{
|
||||||
|
typedef typename T::head_type type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct element_impl<0, T, true /* IsConst */>
|
||||||
|
{
|
||||||
|
typedef const typename T::head_type type;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // end of namespace detail
|
||||||
|
|
||||||
|
|
||||||
|
template<int N, class T>
|
||||||
|
struct element:
|
||||||
|
public detail::element_impl<N, T, ::boost::is_const<T>::value>
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// -get function templates -----------------------------------------------
|
// -get function templates -----------------------------------------------
|
||||||
// Usage: get<N>(aTuple)
|
// Usage: get<N>(aTuple)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user