Fix const correctness bug in bind involving reference_wrapper found by Jonathan Sauer
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@131852 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e003ce4899
commit
ef54251a84
@ -1567,24 +1567,31 @@ __mu(_Ti& __ti, _Uj& __uj)
|
|||||||
return __ti;
|
return __ti;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _Ti, bool IsBindEx, bool IsPh, class _TupleUj>
|
template <class _Ti, bool IsReferenceWrapper, bool IsBindEx, bool IsPh,
|
||||||
|
class _TupleUj>
|
||||||
struct ____mu_return;
|
struct ____mu_return;
|
||||||
|
|
||||||
template <class _Ti, class ..._Uj>
|
template <class _Ti, class ..._Uj>
|
||||||
struct ____mu_return<_Ti, true, false, tuple<_Uj...> >
|
struct ____mu_return<_Ti, false, true, false, tuple<_Uj...> >
|
||||||
{
|
{
|
||||||
typedef typename __invoke_of<_Ti&, _Uj...>::type type;
|
typedef typename __invoke_of<_Ti&, _Uj...>::type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class _Ti, class _TupleUj>
|
template <class _Ti, class _TupleUj>
|
||||||
struct ____mu_return<_Ti, false, true, _TupleUj>
|
struct ____mu_return<_Ti, false, false, true, _TupleUj>
|
||||||
{
|
{
|
||||||
typedef typename tuple_element<is_placeholder<_Ti>::value - 1,
|
typedef typename tuple_element<is_placeholder<_Ti>::value - 1,
|
||||||
_TupleUj>::type&& type;
|
_TupleUj>::type&& type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class _Ti, class _TupleUj>
|
template <class _Ti, class _TupleUj>
|
||||||
struct ____mu_return<_Ti, false, false, _TupleUj>
|
struct ____mu_return<_Ti, true, false, false, _TupleUj>
|
||||||
|
{
|
||||||
|
typedef typename _Ti::type& type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class _Ti, class _TupleUj>
|
||||||
|
struct ____mu_return<_Ti, false, false, false, _TupleUj>
|
||||||
{
|
{
|
||||||
typedef _Ti& type;
|
typedef _Ti& type;
|
||||||
};
|
};
|
||||||
@ -1592,18 +1599,13 @@ struct ____mu_return<_Ti, false, false, _TupleUj>
|
|||||||
template <class _Ti, class _TupleUj>
|
template <class _Ti, class _TupleUj>
|
||||||
struct __mu_return
|
struct __mu_return
|
||||||
: public ____mu_return<_Ti,
|
: public ____mu_return<_Ti,
|
||||||
|
__is_reference_wrapper<_Ti>::value,
|
||||||
is_bind_expression<_Ti>::value,
|
is_bind_expression<_Ti>::value,
|
||||||
0 < is_placeholder<_Ti>::value,
|
0 < is_placeholder<_Ti>::value,
|
||||||
_TupleUj>
|
_TupleUj>
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class _Ti, class _TupleUj>
|
|
||||||
struct __mu_return<reference_wrapper<_Ti>, _TupleUj>
|
|
||||||
{
|
|
||||||
typedef _Ti& type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class _F, class _BoundArgs, class _TupleUj>
|
template <class _F, class _BoundArgs, class _TupleUj>
|
||||||
struct __bind_return;
|
struct __bind_return;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user