33#include <boost/mpl/vector.hpp>
34#include <boost/mpl/fold.hpp>
35#include <boost/mpl/set.hpp>
36#include <boost/mpl/placeholders.hpp>
37#include <boost/mpl/bind.hpp>
39using boost::mpl::placeholders::_;
40using boost::mpl::placeholders::_1;
41using boost::mpl::placeholders::_2;
62 template <
typename U,
typename _Iter>
65 using type =
typename U::type;
72 struct VectorTraits<U,
boost::mpl::void_> {
74 using type =
typename boost::mpl::fold<boost::mpl::vector<>,
76 boost::mpl::insert<boost::mpl::_1, U>
84 using type =
typename VectorTraits<T, typename boost::mpl::begin<T>::type>
::type;
95template <
typename Seq,
typename Wrapper>
97 using type =
typename boost::mpl::fold<
100 boost::mpl::push_back<_1, boost::mpl::bind1<Wrapper, _2>>
111template <
typename _IndexT,
119 static _ReturnT
apply(_IndexT position, F
f)
121 if (position == _Index) {
126 typename boost::mpl::deref<_Iterator>::type element;
132 typename boost::mpl::next<_Iterator>::type,
144template <
typename _IndexT,
typename _End,
typename _ReturnT, _IndexT _Index,
typename F>
146 static _ReturnT
apply(_IndexT position, F
f)
159 template <
typename T>
174template <
typename _Sequence,
typename _IndexT =
int,
typename F = defaultFunctor>
178 typename boost::mpl::end<_Sequence>::type,
typename F::return_type, 0,
179 F>::apply(position,
f);
type trait to transparently use sequences of types This type trait simply forwards to the given type ...
typename VectorTraits< T, typename boost::mpl::begin< T >::type >::type type
the tarits type, always a sequence
GLint GLint GLsizei GLint GLenum GLenum type
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
F::return_type apply_at(_IndexT position, F f)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
static _ReturnT apply(_IndexT position, F f)
static _ReturnT apply(_IndexT position, F f)
return_type operator()(T)
typename boost::mpl::fold< Seq, boost::mpl::vector<>, boost::mpl::push_back< _1, boost::mpl::bind1< Wrapper, _2 > > >::type type