[libc++] Remove unnecessary friend declarations from <__tree> (#152133)

Removing the unnecessary friend declarations from `<__tree>` also
removes the need for forward declaration headers for `map` and `set`,
which this patch also removes.
This commit is contained in:
Nikolas Klauser 2025-08-07 09:18:31 +02:00 committed by GitHub
parent 6abf4f376e
commit 6897ca460e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 14 additions and 100 deletions

View File

@ -447,14 +447,12 @@ set(files
__fwd/get.h
__fwd/ios.h
__fwd/istream.h
__fwd/map.h
__fwd/mdspan.h
__fwd/memory.h
__fwd/memory_resource.h
__fwd/ostream.h
__fwd/pair.h
__fwd/queue.h
__fwd/set.h
__fwd/span.h
__fwd/sstream.h
__fwd/stack.h

View File

@ -1,31 +0,0 @@
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef _LIBCPP___FWD_MAP_H
#define _LIBCPP___FWD_MAP_H
#include <__config>
#include <__fwd/functional.h>
#include <__fwd/memory.h>
#include <__fwd/pair.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Key, class _Tp, class _Compare = less<_Key>, class _Allocator = allocator<pair<const _Key, _Tp> > >
class map;
template <class _Key, class _Tp, class _Compare = less<_Key>, class _Allocator = allocator<pair<const _Key, _Tp> > >
class multimap;
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP___FWD_MAP_H

View File

@ -1,30 +0,0 @@
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef _LIBCPP___FWD_SET_H
#define _LIBCPP___FWD_SET_H
#include <__config>
#include <__fwd/functional.h>
#include <__fwd/memory.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Key, class _Compare = less<_Key>, class _Allocator = allocator<_Key> >
class set;
template <class _Key, class _Compare = less<_Key>, class _Allocator = allocator<_Key> >
class multiset;
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP___FWD_SET_H

View File

@ -13,9 +13,7 @@
#include <__algorithm/min.h>
#include <__assert>
#include <__config>
#include <__fwd/map.h>
#include <__fwd/pair.h>
#include <__fwd/set.h>
#include <__iterator/distance.h>
#include <__iterator/iterator_traits.h>
#include <__iterator/next.h>
@ -686,16 +684,6 @@ private:
friend class __tree;
template <class, class, class>
friend class __tree_const_iterator;
template <class>
friend class __map_iterator;
template <class, class, class, class>
friend class map;
template <class, class, class, class>
friend class multimap;
template <class, class, class>
friend class set;
template <class, class, class>
friend class multiset;
};
template <class _Tp, class _NodePtr, class _DiffType>
@ -709,18 +697,15 @@ class __tree_const_iterator {
__end_node_pointer __ptr_;
public:
using iterator_category = bidirectional_iterator_tag;
using value_type = __get_node_value_type_t<_Tp>;
using difference_type = _DiffType;
using reference = const value_type&;
using pointer = __rebind_pointer_t<_NodePtr, const value_type>;
using iterator_category = bidirectional_iterator_tag;
using value_type = __get_node_value_type_t<_Tp>;
using difference_type = _DiffType;
using reference = const value_type&;
using pointer = __rebind_pointer_t<_NodePtr, const value_type>;
using __non_const_iterator _LIBCPP_NODEBUG = __tree_iterator<_Tp, __node_pointer, difference_type>;
_LIBCPP_HIDE_FROM_ABI __tree_const_iterator() _NOEXCEPT : __ptr_(nullptr) {}
private:
typedef __tree_iterator<_Tp, __node_pointer, difference_type> __non_const_iterator;
public:
_LIBCPP_HIDE_FROM_ABI __tree_const_iterator(__non_const_iterator __p) _NOEXCEPT : __ptr_(__p.__ptr_) {}
_LIBCPP_HIDE_FROM_ABI reference operator*() const { return __get_np()->__value_; }
@ -762,16 +747,6 @@ private:
template <class, class, class>
friend class __tree;
template <class, class, class, class>
friend class map;
template <class, class, class, class>
friend class multimap;
template <class, class, class>
friend class set;
template <class, class, class>
friend class multiset;
template <class>
friend class __map_const_iterator;
};
template <class _Tp, class _Compare>

View File

@ -582,7 +582,6 @@ erase_if(multimap<Key, T, Compare, Allocator>& c, Predicate pred); // C++20
# include <__functional/binary_function.h>
# include <__functional/is_transparent.h>
# include <__functional/operations.h>
# include <__fwd/map.h>
# include <__iterator/erase_if_container.h>
# include <__iterator/iterator_traits.h>
# include <__iterator/ranges_iterator_traits.h>
@ -861,7 +860,10 @@ public:
friend class __tree_const_iterator;
};
template <class _Key, class _Tp, class _Compare, class _Allocator>
template <class _Key, class _Tp, class _Compare = less<_Key>, class _Allocator = allocator<pair<const _Key, _Tp> > >
class multimap;
template <class _Key, class _Tp, class _Compare = less<_Key>, class _Allocator = allocator<pair<const _Key, _Tp> > >
class map {
public:
// types:

View File

@ -1607,7 +1607,6 @@ module std [system] {
}
module map {
module fwd { header "__fwd/map.h" }
header "map"
export *
export std.iterator.reverse_iterator
@ -1974,7 +1973,6 @@ module std [system] {
}
module set {
module fwd { header "__fwd/set.h" }
header "set"
export *
export std.iterator.reverse_iterator

View File

@ -522,7 +522,6 @@ erase_if(multiset<Key, Compare, Allocator>& c, Predicate pred); // C++20
# include <__config>
# include <__functional/is_transparent.h>
# include <__functional/operations.h>
# include <__fwd/set.h>
# include <__iterator/erase_if_container.h>
# include <__iterator/iterator_traits.h>
# include <__iterator/ranges_iterator_traits.h>
@ -570,7 +569,10 @@ _LIBCPP_PUSH_MACROS
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Key, class _Compare, class _Allocator>
template <class _Key, class _Compare = less<_Key>, class _Allocator = allocator<_Key> >
class multiset;
template <class _Key, class _Compare = less<_Key>, class _Allocator = allocator<_Key> >
class set {
public:
// types: