@@ -30,53 +30,57 @@ inheritBaseMembers(
30
30
RecordInterface const & base,
31
31
AccessKind const A)
32
32
{
33
+ auto && members = allMembers (derived);
34
+
33
35
if (A == AccessKind::Public)
34
36
{
35
37
// When a class uses public member access specifier to derive from a
36
38
// base, all public members of the base class are accessible as public
37
39
// members of the derived class and all protected members of the base
38
40
// class are accessible as protected members of the derived class.
39
41
// Private members of the base are never accessible unless friended.
40
- inheritBaseMembers (derivedId, derived.Public , base.Public );
41
- inheritBaseMembers (derivedId, derived.Protected , base.Protected );
42
+ inheritBaseMembers (derivedId, derived.Public , base.Public , members );
43
+ inheritBaseMembers (derivedId, derived.Protected , base.Protected , members );
42
44
}
43
45
else if (A == AccessKind::Protected)
44
46
{
45
47
// When a class uses protected member access specifier to derive from a
46
48
// base, all public and protected members of the base class are
47
49
// accessible as protected members of the derived class (private members
48
50
// of the base are never accessible unless friended).
49
- inheritBaseMembers (derivedId, derived.Protected , base.Public );
50
- inheritBaseMembers (derivedId, derived.Protected , base.Protected );
51
+ inheritBaseMembers (derivedId, derived.Protected , base.Public , members );
52
+ inheritBaseMembers (derivedId, derived.Protected , base.Protected , members );
51
53
}
52
54
else if (A == AccessKind::Private && corpus_.config ->extractPrivate )
53
55
{
54
56
// When a class uses private member access specifier to derive from a
55
57
// base, all public and protected members of the base class are
56
58
// accessible as private members of the derived class (private members
57
59
// of the base are never accessible unless friended).
58
- inheritBaseMembers (derivedId, derived.Private , base.Public );
59
- inheritBaseMembers (derivedId, derived.Private , base.Protected );
60
+ inheritBaseMembers (derivedId, derived.Private , base.Public , members );
61
+ inheritBaseMembers (derivedId, derived.Private , base.Protected , members );
60
62
}
61
63
}
62
64
65
+ template <std::ranges::range Range>
63
66
void
64
67
BaseMembersFinalizer::
65
68
inheritBaseMembers (
66
69
SymbolID const & derivedId,
67
70
RecordTranche& derived,
68
- RecordTranche const & base)
71
+ RecordTranche const & base,
72
+ Range allMembers)
69
73
{
70
- inheritBaseMembers (derivedId, derived.NamespaceAliases , base.NamespaceAliases );
71
- inheritBaseMembers (derivedId, derived.Typedefs , base.Typedefs );
72
- inheritBaseMembers (derivedId, derived.Records , base.Records );
73
- inheritBaseMembers (derivedId, derived.Enums , base.Enums );
74
- inheritBaseMembers (derivedId, derived.Functions , base.Functions );
75
- inheritBaseMembers (derivedId, derived.StaticFunctions , base.StaticFunctions );
76
- inheritBaseMembers (derivedId, derived.Variables , base.Variables );
77
- inheritBaseMembers (derivedId, derived.StaticVariables , base.StaticVariables );
78
- inheritBaseMembers (derivedId, derived.Concepts , base.Concepts );
79
- inheritBaseMembers (derivedId, derived.Guides , base.Guides );
74
+ inheritBaseMembers (derivedId, derived.NamespaceAliases , base.NamespaceAliases , allMembers );
75
+ inheritBaseMembers (derivedId, derived.Typedefs , base.Typedefs , allMembers );
76
+ inheritBaseMembers (derivedId, derived.Records , base.Records , allMembers );
77
+ inheritBaseMembers (derivedId, derived.Enums , base.Enums , allMembers );
78
+ inheritBaseMembers (derivedId, derived.Functions , base.Functions , allMembers );
79
+ inheritBaseMembers (derivedId, derived.StaticFunctions , base.StaticFunctions , allMembers );
80
+ inheritBaseMembers (derivedId, derived.Variables , base.Variables , allMembers );
81
+ inheritBaseMembers (derivedId, derived.StaticVariables , base.StaticVariables , allMembers );
82
+ inheritBaseMembers (derivedId, derived.Concepts , base.Concepts , allMembers );
83
+ inheritBaseMembers (derivedId, derived.Guides , base.Guides , allMembers );
80
84
}
81
85
82
86
namespace {
@@ -91,12 +95,14 @@ shouldCopy(Config const& config, Info const& M)
91
95
}
92
96
}
93
97
98
+ template <std::ranges::range Range>
94
99
void
95
100
BaseMembersFinalizer::
96
101
inheritBaseMembers (
97
102
SymbolID const & derivedId,
98
103
std::vector<SymbolID>& derived,
99
- std::vector<SymbolID> const & base)
104
+ std::vector<SymbolID> const & base,
105
+ Range allMembers)
100
106
{
101
107
for (SymbolID const & otherID: base)
102
108
{
@@ -116,7 +122,7 @@ inheritBaseMembers(
116
122
117
123
// Check if derived class has a member that shadows the base member
118
124
auto shadowIt = std::ranges::find_if (
119
- derived ,
125
+ allMembers ,
120
126
[&](SymbolID const & id)
121
127
{
122
128
Info* infoPtr = corpus_.find (id);
@@ -135,7 +141,7 @@ inheritBaseMembers(
135
141
// are the same
136
142
return info.Name == otherInfo.Name ;
137
143
});
138
- MRDOCS_CHECK_OR_CONTINUE (shadowIt == derived .end ());
144
+ MRDOCS_CHECK_OR_CONTINUE (shadowIt == allMembers .end ());
139
145
140
146
// Not a shadow, so inherit the base member
141
147
if (!shouldCopy (corpus_.config , otherInfo))
0 commit comments