Skip to content

Commit 639d6d2

Browse files
[class.mi] Define ambiguous/unambiguous base class
Currently, terms _ambiguous base class_ and _unambiguous base class_ are used without clear definition. The intent seems already clear to me, but perhaps it would be better to properly define them.
1 parent 555f3c3 commit 639d6d2

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

source/classes.tex

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3665,6 +3665,27 @@
36653665
\end{importgraphic}
36663666
\end{note}
36673667

3668+
\pnum
3669+
\indextext{base class!ambiguous}%
3670+
\indextext{base class!unambiguous}%
3671+
When class \tcode{B} is a possibly indirect base class of class \tcode{D},
3672+
if there is only one possibly indirect base class subobject of type \tcode{B}
3673+
of a \tcode{D} object, \tcode{B} is an \defnadj{unambiguous}{base class} of \tcode{D},
3674+
otherwise, \tcode{B} is an \defnadj{ambiguous}{base class} of \tcode{D}.
3675+
\begin{example}
3676+
\begin{codeblock}
3677+
class B { @\commentellip@ };
3678+
class MX : public B { @\commentellip@ };
3679+
class MY : public B { @\commentellip@ };
3680+
class D1 : public MX, public MY { @\commentellip@ }; // \tcode{B} is an ambiguous base class of \tcode{D1}
3681+
class D2 : public MX, public B { @\commentellip@ }; // \tcode{B} is an ambiguous base class of \tcode{D2}
3682+
3683+
class VMX : virtual public B { @\commentellip@ };
3684+
class VMY : virtual public B { @\commentellip@ };
3685+
class D3 : public VMX, public VMY { @\commentellip@ }; // \tcode{B} is an unambiguous base class of \tcode{D3}
3686+
\end{codeblock}
3687+
\end{example}
3688+
36683689
\rSec2[class.virtual]{Virtual functions}%
36693690
\indextext{function!virtual|(}%
36703691
\indextext{type!polymorphic}%

0 commit comments

Comments
 (0)