mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-04 08:16:49 +00:00
Zhihao Yuan noted that a move assignment operation was missing from std::adjacent_difference. Fixed.
llvm-svn: 189036
This commit is contained in:
parent
89732e1362
commit
9ff3203fcc
@ -157,7 +157,7 @@ adjacent_difference(_InputIterator __first, _InputIterator __last, _OutputIterat
|
||||
{
|
||||
typename iterator_traits<_InputIterator>::value_type __t2(*__first);
|
||||
*__result = __t2 - __t1;
|
||||
__t1 = __t2;
|
||||
__t1 = _VSTD::move(__t2);
|
||||
}
|
||||
}
|
||||
return __result;
|
||||
@ -177,7 +177,7 @@ adjacent_difference(_InputIterator __first, _InputIterator __last, _OutputIterat
|
||||
{
|
||||
typename iterator_traits<_InputIterator>::value_type __t2(*__first);
|
||||
*__result = __binary_op(__t2, __t1);
|
||||
__t1 = __t2;
|
||||
__t1 = _VSTD::move(__t2);
|
||||
}
|
||||
}
|
||||
return __result;
|
||||
|
@ -38,6 +38,43 @@ test()
|
||||
assert(ib[i] == ir[i]);
|
||||
}
|
||||
|
||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
|
||||
class Y;
|
||||
|
||||
class X
|
||||
{
|
||||
int i_;
|
||||
|
||||
X& operator=(const X&);
|
||||
public:
|
||||
explicit X(int i) : i_(i) {}
|
||||
X(const X& x) : i_(x.i_) {}
|
||||
X& operator=(X&& x)
|
||||
{
|
||||
i_ = x.i_;
|
||||
x.i_ = -1;
|
||||
return *this;
|
||||
}
|
||||
|
||||
friend X operator-(const X& x, const X& y) {return X(x.i_ - y.i_);}
|
||||
|
||||
friend class Y;
|
||||
};
|
||||
|
||||
class Y
|
||||
{
|
||||
int i_;
|
||||
|
||||
Y& operator=(const Y&);
|
||||
public:
|
||||
explicit Y(int i) : i_(i) {}
|
||||
Y(const Y& y) : i_(y.i_) {}
|
||||
void operator=(const X& x) {i_ = x.i_;}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
int main()
|
||||
{
|
||||
test<input_iterator<const int*>, output_iterator<int*> >();
|
||||
@ -69,4 +106,10 @@ int main()
|
||||
test<const int*, bidirectional_iterator<int*> >();
|
||||
test<const int*, random_access_iterator<int*> >();
|
||||
test<const int*, int*>();
|
||||
|
||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
X x[3] = {X(1), X(2), X(3)};
|
||||
Y y[3] = {Y(1), Y(2), Y(3)};
|
||||
std::adjacent_difference(x, x+3, y);
|
||||
#endif
|
||||
}
|
||||
|
@ -40,6 +40,44 @@ test()
|
||||
assert(ib[i] == ir[i]);
|
||||
}
|
||||
|
||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
|
||||
class Y;
|
||||
|
||||
class X
|
||||
{
|
||||
int i_;
|
||||
|
||||
X& operator=(const X&);
|
||||
public:
|
||||
explicit X(int i) : i_(i) {}
|
||||
X(const X& x) : i_(x.i_) {}
|
||||
X& operator=(X&& x)
|
||||
{
|
||||
i_ = x.i_;
|
||||
x.i_ = -1;
|
||||
return *this;
|
||||
}
|
||||
|
||||
friend X operator-(const X& x, const X& y) {return X(x.i_ - y.i_);}
|
||||
|
||||
friend class Y;
|
||||
};
|
||||
|
||||
class Y
|
||||
{
|
||||
int i_;
|
||||
|
||||
Y& operator=(const Y&);
|
||||
public:
|
||||
explicit Y(int i) : i_(i) {}
|
||||
Y(const Y& y) : i_(y.i_) {}
|
||||
void operator=(const X& x) {i_ = x.i_;}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
test<input_iterator<const int*>, output_iterator<int*> >();
|
||||
@ -71,4 +109,10 @@ int main()
|
||||
test<const int*, bidirectional_iterator<int*> >();
|
||||
test<const int*, random_access_iterator<int*> >();
|
||||
test<const int*, int*>();
|
||||
|
||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||
X x[3] = {X(1), X(2), X(3)};
|
||||
Y y[3] = {Y(1), Y(2), Y(3)};
|
||||
std::adjacent_difference(x, x+3, y, std::minus<X>());
|
||||
#endif
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user