28 #ifndef YB_INC_ystdex_functional_hpp_
29 #define YB_INC_ystdex_functional_hpp_ 1
44 template<
typename... _tParams>
48 return sizeof...(_tParams);
58 template<
typename _fCallable>
62 template<
typename _fCallable,
typename _type,
typename... _tParams>
64 seq_apply(_fCallable&& f, _type&& arg, _tParams&&... args)
77 template<
typename _fCallable,
typename... _tParams>
95 template<
typename _tRet,
typename... _tParams>
98 typedef std::tuple<_tParams...>
type;
101 template<
typename _tRet,
typename... _tParams>
104 typedef std::tuple<_tParams...>
type;
107 template<
typename _tRet,
typename... _tParams>
110 typedef std::tuple<_tParams...>
type;
113 template<
typename _tRet,
class _tClass,
typename... _tParams>
116 typedef std::tuple<_tParams...>
type;
120 template<
typename _tRet,
class _tClass,
typename... _tParams>
123 typedef std::tuple<_tParams...>
type;
127 template<
typename _tRet,
class _tClass,
typename... _tParams>
130 typedef std::tuple<_tParams...>
type;
134 template<
typename _tRet,
class _tClass,
typename... _tParams>
137 typedef std::tuple<_tParams...>
type;
152 template<
typename _tResult,
typename... _tParams>
158 template<
typename _tResult,
typename... _tParams>
164 template<
typename _tResult,
typename... _tParams>
170 template<
typename _tResult,
class _tClass,
typename... _tParams>
177 template<
typename _tResult,
class _tClass,
typename... _tParams>
178 struct return_of<_tResult(_tClass::*)(_tParams...) const>
184 template<
typename _tResult,
class _tClass,
typename... _tParams>
185 struct return_of<_tResult(_tClass::*)(_tParams...) volatile>
191 template<
typename _tResult,
class _tClass,
typename... _tParams>
192 struct return_of<_tResult(_tClass::*)(_tParams...) const volatile>
205 template<
size_t _vIdx,
typename _fCallable>
208 typedef typename std::tuple_element<_vIdx,
typename
218 template<
typename _fCallable>
220 make_parameter_tuple<_fCallable>::type>::value>
230 template<
typename _type>
236 template<
typename _tWrapped>
251 template<
typename _type>
257 template<
typename _type>
276 template<
typename _type>
280 operator()(
const _type& _x,
const _type& _y)
const
291 template<
bool,
typename _tScalar>
300 template<
typename _tScalar>
317 template<
bool,
typename _tScalar1,
typename _tScalar2>
326 template<
typename _tScalar1,
typename _tScalar2>
341 template<
bool _bIsPositive,
typename _tScalar>
353 template<
bool _bIsPositive,
typename _tScalar1,
typename _tScalar2>
365 template<
typename _type>
383 template<
typename _type>
384 struct const_deref_op
403 template<
typename _type,
typename _tPointer = _type*,
404 class _fCompare = std::less<_type>>
412 operator()(
const _tPointer& _x,
const _tPointer& _y)
const
414 return bool(_x) && bool(_y) && _fCompare()(*_x, *_y);
425 template<
typename _tChar,
class _fCompare = std::less<_tChar>>
426 struct deref_str_comp
433 operator()(
const _tChar* x,
const _tChar* y)
const
435 typedef std::char_traits<_tChar> traits_type;
437 return x && y && std::lexicographical_compare(x, x + traits_type
438 ::length(x), y, y + traits_type::length(y), _fCompare());