Skip to content

Commit

Permalink
Add [[clang::lifetimebound]] to numerous functions in libc++ include …
Browse files Browse the repository at this point in the history
…headers
  • Loading branch information
higher-performance committed Oct 29, 2024
1 parent a78861f commit 3f3fe89
Show file tree
Hide file tree
Showing 25 changed files with 601 additions and 601 deletions.
4 changes: 2 additions & 2 deletions libcxx/include/__bit_reference
Original file line number Diff line number Diff line change
Expand Up @@ -609,10 +609,10 @@ struct __bit_array {
std::__construct_at(__word_ + __i, 0);
}
}
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 iterator begin() {
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 iterator begin() _LIBCPP_LIFETIMEBOUND {
return iterator(pointer_traits<__storage_pointer>::pointer_to(__word_[0]), 0);
}
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 iterator end() {
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 iterator end() _LIBCPP_LIFETIMEBOUND {
return iterator(pointer_traits<__storage_pointer>::pointer_to(__word_[0]) + __size_ / __bits_per_word,
static_cast<unsigned>(__size_ % __bits_per_word));
}
Expand Down
4 changes: 2 additions & 2 deletions libcxx/include/__expected/expected.h
Original file line number Diff line number Diff line change
Expand Up @@ -714,15 +714,15 @@ class expected : private __expected_base<_Tp, _Err> {

template <class... _Args>
requires is_nothrow_constructible_v<_Tp, _Args...>
_LIBCPP_HIDE_FROM_ABI constexpr _Tp& emplace(_Args&&... __args) noexcept {
_LIBCPP_HIDE_FROM_ABI constexpr _Tp& emplace(_Args&&... __args) noexcept _LIBCPP_LIFETIMEBOUND {
this->__destroy();
this->__construct(in_place, std::forward<_Args>(__args)...);
return this->__val();
}

template <class _Up, class... _Args>
requires is_nothrow_constructible_v<_Tp, initializer_list<_Up>&, _Args...>
_LIBCPP_HIDE_FROM_ABI constexpr _Tp& emplace(initializer_list<_Up> __il, _Args&&... __args) noexcept {
_LIBCPP_HIDE_FROM_ABI constexpr _Tp& emplace(initializer_list<_Up> __il, _Args&&... __args) noexcept _LIBCPP_LIFETIMEBOUND {
this->__destroy();
this->__construct(in_place, __il, std::forward<_Args>(__args)...);
return this->__val();
Expand Down
98 changes: 49 additions & 49 deletions libcxx/include/__flat_map/flat_map.h
Original file line number Diff line number Diff line change
Expand Up @@ -509,31 +509,31 @@ class flat_map {
}

// iterators
_LIBCPP_HIDE_FROM_ABI iterator begin() noexcept {
_LIBCPP_HIDE_FROM_ABI iterator begin() noexcept _LIBCPP_LIFETIMEBOUND {
return iterator(__containers_.keys.begin(), __containers_.values.begin());
}

_LIBCPP_HIDE_FROM_ABI const_iterator begin() const noexcept {
_LIBCPP_HIDE_FROM_ABI const_iterator begin() const noexcept _LIBCPP_LIFETIMEBOUND {
return const_iterator(__containers_.keys.begin(), __containers_.values.begin());
}

_LIBCPP_HIDE_FROM_ABI iterator end() noexcept {
_LIBCPP_HIDE_FROM_ABI iterator end() noexcept _LIBCPP_LIFETIMEBOUND {
return iterator(__containers_.keys.end(), __containers_.values.end());
}

_LIBCPP_HIDE_FROM_ABI const_iterator end() const noexcept {
_LIBCPP_HIDE_FROM_ABI const_iterator end() const noexcept _LIBCPP_LIFETIMEBOUND {
return const_iterator(__containers_.keys.end(), __containers_.values.end());
}

_LIBCPP_HIDE_FROM_ABI reverse_iterator rbegin() noexcept { return reverse_iterator(end()); }
_LIBCPP_HIDE_FROM_ABI const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(end()); }
_LIBCPP_HIDE_FROM_ABI reverse_iterator rend() noexcept { return reverse_iterator(begin()); }
_LIBCPP_HIDE_FROM_ABI const_reverse_iterator rend() const noexcept { return const_reverse_iterator(begin()); }
_LIBCPP_HIDE_FROM_ABI reverse_iterator rbegin() noexcept _LIBCPP_LIFETIMEBOUND { return reverse_iterator(end()); }
_LIBCPP_HIDE_FROM_ABI const_reverse_iterator rbegin() const noexcept _LIBCPP_LIFETIMEBOUND { return const_reverse_iterator(end()); }
_LIBCPP_HIDE_FROM_ABI reverse_iterator rend() noexcept _LIBCPP_LIFETIMEBOUND { return reverse_iterator(begin()); }
_LIBCPP_HIDE_FROM_ABI const_reverse_iterator rend() const noexcept _LIBCPP_LIFETIMEBOUND { return const_reverse_iterator(begin()); }

_LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const noexcept { return begin(); }
_LIBCPP_HIDE_FROM_ABI const_iterator cend() const noexcept { return end(); }
_LIBCPP_HIDE_FROM_ABI const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(end()); }
_LIBCPP_HIDE_FROM_ABI const_reverse_iterator crend() const noexcept { return const_reverse_iterator(begin()); }
_LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const noexcept _LIBCPP_LIFETIMEBOUND { return begin(); }
_LIBCPP_HIDE_FROM_ABI const_iterator cend() const noexcept _LIBCPP_LIFETIMEBOUND { return end(); }
_LIBCPP_HIDE_FROM_ABI const_reverse_iterator crbegin() const noexcept _LIBCPP_LIFETIMEBOUND { return const_reverse_iterator(end()); }
_LIBCPP_HIDE_FROM_ABI const_reverse_iterator crend() const noexcept _LIBCPP_LIFETIMEBOUND { return const_reverse_iterator(begin()); }

// [flat.map.capacity], capacity
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool empty() const noexcept { return __containers_.keys.empty(); }
Expand Down Expand Up @@ -564,15 +564,15 @@ class flat_map {
return try_emplace(std::forward<_Kp>(__x)).first->second;
}

_LIBCPP_HIDE_FROM_ABI mapped_type& at(const key_type& __x) {
_LIBCPP_HIDE_FROM_ABI mapped_type& at(const key_type& __x) _LIBCPP_LIFETIMEBOUND {
auto __it = find(__x);
if (__it == end()) {
std::__throw_out_of_range("flat_map::at(const key_type&): Key does not exist");
}
return __it->second;
}

_LIBCPP_HIDE_FROM_ABI const mapped_type& at(const key_type& __x) const {
_LIBCPP_HIDE_FROM_ABI const mapped_type& at(const key_type& __x) const _LIBCPP_LIFETIMEBOUND {
auto __it = find(__x);
if (__it == end()) {
std::__throw_out_of_range("flat_map::at(const key_type&) const: Key does not exist");
Expand All @@ -582,7 +582,7 @@ class flat_map {

template <class _Kp>
requires __is_compare_transparent
_LIBCPP_HIDE_FROM_ABI mapped_type& at(const _Kp& __x) {
_LIBCPP_HIDE_FROM_ABI mapped_type& at(const _Kp& __x) _LIBCPP_LIFETIMEBOUND {
auto __it = find(__x);
if (__it == end()) {
std::__throw_out_of_range("flat_map::at(const K&): Key does not exist");
Expand All @@ -592,7 +592,7 @@ class flat_map {

template <class _Kp>
requires __is_compare_transparent
_LIBCPP_HIDE_FROM_ABI const mapped_type& at(const _Kp& __x) const {
_LIBCPP_HIDE_FROM_ABI const mapped_type& at(const _Kp& __x) const _LIBCPP_LIFETIMEBOUND {
auto __it = find(__x);
if (__it == end()) {
std::__throw_out_of_range("flat_map::at(const K&) const: Key does not exist");
Expand All @@ -603,39 +603,39 @@ class flat_map {
// [flat.map.modifiers], modifiers
template <class... _Args>
requires is_constructible_v<pair<key_type, mapped_type>, _Args...>
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> emplace(_Args&&... __args) {
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> emplace(_Args&&... __args) _LIBCPP_LIFETIMEBOUND {
std::pair<key_type, mapped_type> __pair(std::forward<_Args>(__args)...);
return __try_emplace(std::move(__pair.first), std::move(__pair.second));
}

template <class... _Args>
requires is_constructible_v<pair<key_type, mapped_type>, _Args...>
_LIBCPP_HIDE_FROM_ABI iterator emplace_hint(const_iterator __hint, _Args&&... __args) {
_LIBCPP_HIDE_FROM_ABI iterator emplace_hint(const_iterator __hint, _Args&&... __args) _LIBCPP_LIFETIMEBOUND {
std::pair<key_type, mapped_type> __pair(std::forward<_Args>(__args)...);
return __try_emplace_hint(__hint, std::move(__pair.first), std::move(__pair.second)).first;
}

_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __x) { return emplace(__x); }
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __x) _LIBCPP_LIFETIMEBOUND { return emplace(__x); }

_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(value_type&& __x) { return emplace(std::move(__x)); }
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(value_type&& __x) _LIBCPP_LIFETIMEBOUND { return emplace(std::move(__x)); }

_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __hint, const value_type& __x) {
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __hint, const value_type& __x) _LIBCPP_LIFETIMEBOUND {
return emplace_hint(__hint, __x);
}

_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __hint, value_type&& __x) {
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __hint, value_type&& __x) _LIBCPP_LIFETIMEBOUND {
return emplace_hint(__hint, std::move(__x));
}

template <class _Pp>
requires is_constructible_v<pair<key_type, mapped_type>, _Pp>
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(_Pp&& __x) {
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(_Pp&& __x) _LIBCPP_LIFETIMEBOUND {
return emplace(std::forward<_Pp>(__x));
}

template <class _Pp>
requires is_constructible_v<pair<key_type, mapped_type>, _Pp>
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __hint, _Pp&& __x) {
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __hint, _Pp&& __x) _LIBCPP_LIFETIMEBOUND {
return emplace_hint(__hint, std::forward<_Pp>(__x));
}

Expand Down Expand Up @@ -731,47 +731,47 @@ class flat_map {

template <class _Mapped>
requires is_assignable_v<mapped_type&, _Mapped> && is_constructible_v<mapped_type, _Mapped>
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert_or_assign(const key_type& __key, _Mapped&& __obj) {
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert_or_assign(const key_type& __key, _Mapped&& __obj) _LIBCPP_LIFETIMEBOUND {
return __insert_or_assign(__key, std::forward<_Mapped>(__obj));
}

template <class _Mapped>
requires is_assignable_v<mapped_type&, _Mapped> && is_constructible_v<mapped_type, _Mapped>
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert_or_assign(key_type&& __key, _Mapped&& __obj) {
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert_or_assign(key_type&& __key, _Mapped&& __obj) _LIBCPP_LIFETIMEBOUND {
return __insert_or_assign(std::move(__key), std::forward<_Mapped>(__obj));
}

template <class _Kp, class _Mapped>
requires __is_compare_transparent && is_constructible_v<key_type, _Kp> && is_assignable_v<mapped_type&, _Mapped> &&
is_constructible_v<mapped_type, _Mapped>
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert_or_assign(_Kp&& __key, _Mapped&& __obj) {
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert_or_assign(_Kp&& __key, _Mapped&& __obj) _LIBCPP_LIFETIMEBOUND {
return __insert_or_assign(std::forward<_Kp>(__key), std::forward<_Mapped>(__obj));
}

template <class _Mapped>
requires is_assignable_v<mapped_type&, _Mapped> && is_constructible_v<mapped_type, _Mapped>
_LIBCPP_HIDE_FROM_ABI iterator insert_or_assign(const_iterator __hint, const key_type& __key, _Mapped&& __obj) {
_LIBCPP_HIDE_FROM_ABI iterator insert_or_assign(const_iterator __hint, const key_type& __key, _Mapped&& __obj) _LIBCPP_LIFETIMEBOUND {
return __insert_or_assign(__hint, __key, std::forward<_Mapped>(__obj));
}

template <class _Mapped>
requires is_assignable_v<mapped_type&, _Mapped> && is_constructible_v<mapped_type, _Mapped>
_LIBCPP_HIDE_FROM_ABI iterator insert_or_assign(const_iterator __hint, key_type&& __key, _Mapped&& __obj) {
_LIBCPP_HIDE_FROM_ABI iterator insert_or_assign(const_iterator __hint, key_type&& __key, _Mapped&& __obj) _LIBCPP_LIFETIMEBOUND {
return __insert_or_assign(__hint, std::move(__key), std::forward<_Mapped>(__obj));
}

template <class _Kp, class _Mapped>
requires __is_compare_transparent && is_constructible_v<key_type, _Kp> && is_assignable_v<mapped_type&, _Mapped> &&
is_constructible_v<mapped_type, _Mapped>
_LIBCPP_HIDE_FROM_ABI iterator insert_or_assign(const_iterator __hint, _Kp&& __key, _Mapped&& __obj) {
_LIBCPP_HIDE_FROM_ABI iterator insert_or_assign(const_iterator __hint, _Kp&& __key, _Mapped&& __obj) _LIBCPP_LIFETIMEBOUND {
return __insert_or_assign(__hint, std::forward<_Kp>(__key), std::forward<_Mapped>(__obj));
}

_LIBCPP_HIDE_FROM_ABI iterator erase(iterator __position) {
_LIBCPP_HIDE_FROM_ABI iterator erase(iterator __position) _LIBCPP_LIFETIMEBOUND {
return __erase(__position.__key_iter_, __position.__mapped_iter_);
}

_LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __position) {
_LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __position) _LIBCPP_LIFETIMEBOUND {
return __erase(__position.__key_iter_, __position.__mapped_iter_);
}

Expand All @@ -794,7 +794,7 @@ class flat_map {
return __res;
}

_LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __first, const_iterator __last) {
_LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __first, const_iterator __last) _LIBCPP_LIFETIMEBOUND {
auto __on_failure = std::__make_exception_guard([&]() noexcept { clear() /* noexcept */; });
auto __key_it = __containers_.keys.erase(__first.__key_iter_, __last.__key_iter_);
auto __mapped_it = __containers_.values.erase(__first.__mapped_iter_, __last.__mapped_iter_);
Expand Down Expand Up @@ -825,19 +825,19 @@ class flat_map {
_LIBCPP_HIDE_FROM_ABI const mapped_container_type& values() const noexcept { return __containers_.values; }

// map operations
_LIBCPP_HIDE_FROM_ABI iterator find(const key_type& __x) { return __find_impl(*this, __x); }
_LIBCPP_HIDE_FROM_ABI iterator find(const key_type& __x) _LIBCPP_LIFETIMEBOUND { return __find_impl(*this, __x); }

_LIBCPP_HIDE_FROM_ABI const_iterator find(const key_type& __x) const { return __find_impl(*this, __x); }
_LIBCPP_HIDE_FROM_ABI const_iterator find(const key_type& __x) const _LIBCPP_LIFETIMEBOUND { return __find_impl(*this, __x); }

template <class _Kp>
requires __is_compare_transparent
_LIBCPP_HIDE_FROM_ABI iterator find(const _Kp& __x) {
_LIBCPP_HIDE_FROM_ABI iterator find(const _Kp& __x) _LIBCPP_LIFETIMEBOUND {
return __find_impl(*this, __x);
}

template <class _Kp>
requires __is_compare_transparent
_LIBCPP_HIDE_FROM_ABI const_iterator find(const _Kp& __x) const {
_LIBCPP_HIDE_FROM_ABI const_iterator find(const _Kp& __x) const _LIBCPP_LIFETIMEBOUND {
return __find_impl(*this, __x);
}

Expand All @@ -857,58 +857,58 @@ class flat_map {
return find(__x) != end();
}

_LIBCPP_HIDE_FROM_ABI iterator lower_bound(const key_type& __x) { return __lower_bound<iterator>(*this, __x); }
_LIBCPP_HIDE_FROM_ABI iterator lower_bound(const key_type& __x) _LIBCPP_LIFETIMEBOUND { return __lower_bound<iterator>(*this, __x); }

_LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const key_type& __x) const {
_LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const key_type& __x) const _LIBCPP_LIFETIMEBOUND {
return __lower_bound<const_iterator>(*this, __x);
}

template <class _Kp>
requires __is_compare_transparent
_LIBCPP_HIDE_FROM_ABI iterator lower_bound(const _Kp& __x) {
_LIBCPP_HIDE_FROM_ABI iterator lower_bound(const _Kp& __x) _LIBCPP_LIFETIMEBOUND {
return __lower_bound<iterator>(*this, __x);
}

template <class _Kp>
requires __is_compare_transparent
_LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const _Kp& __x) const {
_LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const _Kp& __x) const _LIBCPP_LIFETIMEBOUND {
return __lower_bound<const_iterator>(*this, __x);
}

_LIBCPP_HIDE_FROM_ABI iterator upper_bound(const key_type& __x) { return __upper_bound<iterator>(*this, __x); }
_LIBCPP_HIDE_FROM_ABI iterator upper_bound(const key_type& __x) _LIBCPP_LIFETIMEBOUND { return __upper_bound<iterator>(*this, __x); }

_LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const key_type& __x) const {
_LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const key_type& __x) const _LIBCPP_LIFETIMEBOUND {
return __upper_bound<const_iterator>(*this, __x);
}

template <class _Kp>
requires __is_compare_transparent
_LIBCPP_HIDE_FROM_ABI iterator upper_bound(const _Kp& __x) {
_LIBCPP_HIDE_FROM_ABI iterator upper_bound(const _Kp& __x) _LIBCPP_LIFETIMEBOUND {
return __upper_bound<iterator>(*this, __x);
}

template <class _Kp>
requires __is_compare_transparent
_LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const _Kp& __x) const {
_LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const _Kp& __x) const _LIBCPP_LIFETIMEBOUND {
return __upper_bound<const_iterator>(*this, __x);
}

_LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const key_type& __x) {
_LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const key_type& __x) _LIBCPP_LIFETIMEBOUND {
return __equal_range_impl(*this, __x);
}

_LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const key_type& __x) const {
_LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const key_type& __x) const _LIBCPP_LIFETIMEBOUND {
return __equal_range_impl(*this, __x);
}

template <class _Kp>
requires __is_compare_transparent
_LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const _Kp& __x) {
_LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const _Kp& __x) _LIBCPP_LIFETIMEBOUND {
return __equal_range_impl(*this, __x);
}
template <class _Kp>
requires __is_compare_transparent
_LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const _Kp& __x) const {
_LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const _Kp& __x) const _LIBCPP_LIFETIMEBOUND {
return __equal_range_impl(*this, __x);
}

Expand Down
4 changes: 2 additions & 2 deletions libcxx/include/__format/format_parse_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ class _LIBCPP_TEMPLATE_VIS basic_format_parse_context {
basic_format_parse_context(const basic_format_parse_context&) = delete;
basic_format_parse_context& operator=(const basic_format_parse_context&) = delete;

_LIBCPP_HIDE_FROM_ABI constexpr const_iterator begin() const noexcept { return __begin_; }
_LIBCPP_HIDE_FROM_ABI constexpr const_iterator end() const noexcept { return __end_; }
_LIBCPP_HIDE_FROM_ABI constexpr const_iterator begin() const noexcept _LIBCPP_LIFETIMEBOUND { return __begin_; }
_LIBCPP_HIDE_FROM_ABI constexpr const_iterator end() const noexcept _LIBCPP_LIFETIMEBOUND { return __end_; }
_LIBCPP_HIDE_FROM_ABI constexpr void advance_to(const_iterator __it) { __begin_ = __it; }

_LIBCPP_HIDE_FROM_ABI constexpr size_t next_arg_id() {
Expand Down
4 changes: 2 additions & 2 deletions libcxx/include/__format/formatter_floating_point.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,8 @@ class _LIBCPP_TEMPLATE_VIS __float_buffer {
_LIBCPP_HIDE_FROM_ABI __float_buffer(const __float_buffer&) = delete;
_LIBCPP_HIDE_FROM_ABI __float_buffer& operator=(const __float_buffer&) = delete;

_LIBCPP_HIDE_FROM_ABI char* begin() const { return __begin_; }
_LIBCPP_HIDE_FROM_ABI char* end() const { return __begin_ + __size_; }
_LIBCPP_HIDE_FROM_ABI char* begin() const _LIBCPP_LIFETIMEBOUND { return __begin_; }
_LIBCPP_HIDE_FROM_ABI char* end() const _LIBCPP_LIFETIMEBOUND { return __begin_ + __size_; }

_LIBCPP_HIDE_FROM_ABI int __precision() const { return __precision_; }
_LIBCPP_HIDE_FROM_ABI int __num_trailing_zeros() const { return __num_trailing_zeros_; }
Expand Down
16 changes: 8 additions & 8 deletions libcxx/include/__hash_table
Original file line number Diff line number Diff line change
Expand Up @@ -891,10 +891,10 @@ public:

_LIBCPP_HIDE_FROM_ABI size_type bucket_count() const _NOEXCEPT { return __bucket_list_.get_deleter().size(); }

_LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT;
_LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT;
_LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT;
_LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT;
_LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT _LIBCPP_LIFETIMEBOUND;
_LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT _LIBCPP_LIFETIMEBOUND;
_LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT _LIBCPP_LIFETIMEBOUND;
_LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT _LIBCPP_LIFETIMEBOUND;

template <class _Key>
_LIBCPP_HIDE_FROM_ABI size_type bucket(const _Key& __k) const {
Expand All @@ -904,15 +904,15 @@ public:
}

template <class _Key>
_LIBCPP_HIDE_FROM_ABI iterator find(const _Key& __x);
_LIBCPP_HIDE_FROM_ABI iterator find(const _Key& __x) _LIBCPP_LIFETIMEBOUND;
template <class _Key>
_LIBCPP_HIDE_FROM_ABI const_iterator find(const _Key& __x) const;
_LIBCPP_HIDE_FROM_ABI const_iterator find(const _Key& __x) const _LIBCPP_LIFETIMEBOUND;

typedef __hash_node_destructor<__node_allocator> _Dp;
typedef unique_ptr<__node, _Dp> __node_holder;

_LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __p);
_LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __first, const_iterator __last);
_LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __p) _LIBCPP_LIFETIMEBOUND;
_LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __first, const_iterator __last) _LIBCPP_LIFETIMEBOUND;
template <class _Key>
_LIBCPP_HIDE_FROM_ABI size_type __erase_unique(const _Key& __k);
template <class _Key>
Expand Down
Loading

0 comments on commit 3f3fe89

Please sign in to comment.