forked from boostorg/unordered
stylistic
This commit is contained in:
@ -976,28 +976,23 @@ public:
|
|||||||
alloc_traits::propagate_on_container_move_assignment::value;
|
alloc_traits::propagate_on_container_move_assignment::value;
|
||||||
|
|
||||||
/* Avoid using nested lambdas with a `this` capture as it seems to trigger
|
/* Avoid using nested lambdas with a `this` capture as it seems to trigger
|
||||||
* a bug in GCC:
|
* a bug in GCC:
|
||||||
* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80947
|
* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80947
|
||||||
*
|
*
|
||||||
* Rather than directly attempting to manipulate the visibility of the
|
* Rather than directly attempting to manipulate the visibility of the
|
||||||
* table class, it's easier to work around the bug by simply un-nesting the
|
* table class, it's easier to work around the bug by simply un-nesting the
|
||||||
* lambdas
|
* lambdas
|
||||||
*/
|
*/
|
||||||
auto const move_element=[this](value_type* p){
|
auto const move_element=[this](value_type* p){
|
||||||
unchecked_insert(std::move(*p));
|
unchecked_insert(std::move(*p));
|
||||||
};
|
};
|
||||||
|
|
||||||
auto const elementwise_move=[&,this]{
|
auto const elementwise_move=[&,this]{
|
||||||
/* The check above is redundant: we're setting up a compile-time
|
|
||||||
* barrier so that the compiler is convinced we're not throwing
|
|
||||||
* under noexcept(true) conditions.
|
|
||||||
*/
|
|
||||||
|
|
||||||
reserve(x.size());
|
reserve(x.size());
|
||||||
BOOST_TRY{
|
BOOST_TRY{
|
||||||
/* This works because subsequent x.clear() does not depend on the
|
/* This works because subsequent x.clear() does not depend on the
|
||||||
* elements' values.
|
* elements' values.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
x.for_all_elements(move_element);
|
x.for_all_elements(move_element);
|
||||||
}
|
}
|
||||||
@ -1022,6 +1017,10 @@ public:
|
|||||||
swap(ml,x.ml);
|
swap(ml,x.ml);
|
||||||
}
|
}
|
||||||
else if_constexpr<!alloc_traits::is_always_equal::value>(
|
else if_constexpr<!alloc_traits::is_always_equal::value>(
|
||||||
|
/* The check above is redundant: we're setting up a compile-time
|
||||||
|
* barrier so that the compiler is convinced we're not throwing
|
||||||
|
* under noexcept(true) conditions.
|
||||||
|
*/
|
||||||
elementwise_move);
|
elementwise_move);
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
@ -1263,8 +1262,7 @@ private:
|
|||||||
return init_type{std::forward<T>(x)};
|
return init_type{std::forward<T>(x)};
|
||||||
}
|
}
|
||||||
|
|
||||||
template<
|
template<typename T>
|
||||||
typename T>
|
|
||||||
static inline auto key_from(const T& x)
|
static inline auto key_from(const T& x)
|
||||||
->decltype(type_policy::extract(x))
|
->decltype(type_policy::extract(x))
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user