mirror of
https://github.com/boostorg/unordered.git
synced 2026-05-05 12:14:18 +02:00
made boost::unordered_[multi](map|set)::[const_][local_]iterator instantiable with incomplete value_type (#321)
* made boost::unordered_[multi](map|set)::[const_][local_]iterator instantiable with incomplete value_type * qualified name to avoid self-definition
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
// Copyright (C) 2022-2024 Joaquin M Lopez Munoz.
|
||||
// Copyright (C) 2022-2025 Joaquin M Lopez Munoz.
|
||||
// Copyright (C) 2022 Christian Mazakas
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
@@ -134,11 +134,37 @@ namespace boost {
|
||||
namespace unordered {
|
||||
namespace detail {
|
||||
|
||||
template <class ValueType, class VoidPtr> struct node;
|
||||
|
||||
// access to node::value_type and node::pointer for incomplete node
|
||||
|
||||
template<class Node> struct node_value_type_impl;
|
||||
|
||||
template <class ValueType, class VoidPtr>
|
||||
struct node_value_type_impl<node<ValueType, VoidPtr>>
|
||||
{
|
||||
typedef ValueType type;
|
||||
};
|
||||
|
||||
template<class Node> using node_value_type =
|
||||
typename node_value_type_impl<Node>::type;
|
||||
|
||||
template<class Node> struct node_pointer_impl;
|
||||
|
||||
template <class ValueType, class VoidPtr>
|
||||
struct node_pointer_impl<node<ValueType, VoidPtr>>
|
||||
{
|
||||
typedef typename boost::pointer_traits<VoidPtr>::template rebind_to<
|
||||
node<ValueType, VoidPtr>>::type type;
|
||||
};
|
||||
|
||||
template<class Node> using node_pointer =
|
||||
typename node_pointer_impl<Node>::type;
|
||||
|
||||
template <class ValueType, class VoidPtr> struct node
|
||||
{
|
||||
typedef ValueType value_type;
|
||||
typedef typename boost::pointer_traits<VoidPtr>::template rebind_to<
|
||||
node>::type node_pointer;
|
||||
typedef node_value_type<node> value_type;
|
||||
typedef detail::node_pointer<node> node_pointer;
|
||||
|
||||
node_pointer next;
|
||||
opt_storage<value_type> buf;
|
||||
@@ -304,10 +330,10 @@ namespace boost {
|
||||
|
||||
template <class Node> struct grouped_local_bucket_iterator
|
||||
{
|
||||
typedef typename Node::node_pointer node_pointer;
|
||||
typedef detail::node_pointer<Node> node_pointer;
|
||||
|
||||
public:
|
||||
typedef typename Node::value_type value_type;
|
||||
typedef detail::node_value_type<Node> value_type;
|
||||
typedef value_type element_type;
|
||||
typedef value_type* pointer;
|
||||
typedef value_type& reference;
|
||||
@@ -370,10 +396,10 @@ namespace boost {
|
||||
|
||||
template <class Node> struct const_grouped_local_bucket_iterator
|
||||
{
|
||||
typedef typename Node::node_pointer node_pointer;
|
||||
typedef detail::node_pointer<Node> node_pointer;
|
||||
|
||||
public:
|
||||
typedef typename Node::value_type const value_type;
|
||||
typedef detail::node_value_type<Node> const value_type;
|
||||
typedef value_type const element_type;
|
||||
typedef value_type const* pointer;
|
||||
typedef value_type const& reference;
|
||||
|
||||
@@ -969,7 +969,7 @@ namespace boost {
|
||||
template <class Node, class Bucket> class iterator
|
||||
{
|
||||
public:
|
||||
typedef typename Node::value_type value_type;
|
||||
typedef typename detail::node_value_type<Node> value_type;
|
||||
typedef value_type element_type;
|
||||
typedef value_type* pointer;
|
||||
typedef value_type& reference;
|
||||
@@ -1023,7 +1023,7 @@ namespace boost {
|
||||
}
|
||||
|
||||
private:
|
||||
typedef typename Node::node_pointer node_pointer;
|
||||
typedef detail::node_pointer<Node> node_pointer;
|
||||
typedef grouped_bucket_iterator<Bucket> bucket_iterator;
|
||||
|
||||
node_pointer p;
|
||||
@@ -1076,7 +1076,7 @@ namespace boost {
|
||||
template <class Node, class Bucket> class c_iterator
|
||||
{
|
||||
public:
|
||||
typedef typename Node::value_type value_type;
|
||||
typedef typename detail::node_value_type<Node> value_type;
|
||||
typedef value_type const element_type;
|
||||
typedef value_type const* pointer;
|
||||
typedef value_type const& reference;
|
||||
@@ -1131,7 +1131,7 @@ namespace boost {
|
||||
}
|
||||
|
||||
private:
|
||||
typedef typename Node::node_pointer node_pointer;
|
||||
typedef detail::node_pointer<Node> node_pointer;
|
||||
typedef grouped_bucket_iterator<Bucket> bucket_iterator;
|
||||
|
||||
node_pointer p;
|
||||
|
||||
Reference in New Issue
Block a user