220 31677 <6aa2e439-345e-4f04-8843-f38bb7b825b2@isocpp.org> article
Path: news.gmane.org!.POSTED!not-for-mail
From: Denis Kotov <redradist@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Simplify virtual inheritance rules
Date: Sat, 18 Mar 2017 12:31:32 -0700 (PDT)
Lines: 182
Approved: news@gmane.org
Message-ID: <6aa2e439-345e-4f04-8843-f38bb7b825b2@isocpp.org>
Reply-To: std-proposals@isocpp.org
NNTP-Posting-Host: blaine.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_523_302603043.1489865492046"
X-Trace: blaine.gmane.org 1489865498 7040 195.159.176.226 (18 Mar 2017 19:31:38 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Sat, 18 Mar 2017 19:31:38 +0000 (UTC)
To: ISO C++ Standard - Future Proposals <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBDY2PNGE6QOBBFEWW3DAKGQE6XTTC5Q@isocpp.org Sat Mar 18 20:31:33 2017
Return-path: <std-proposals+bncBDY2PNGE6QOBBFEWW3DAKGQE6XTTC5Q@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-pf0-f197.google.com ([209.85.192.197])
	by blaine.gmane.org with esmtp (Exim 4.84_2)
	(envelope-from <std-proposals+bncBDY2PNGE6QOBBFEWW3DAKGQE6XTTC5Q@isocpp.org>)
	id 1cpK4V-0000ch-Eh
	for gclcip-std-proposals@m.gmane.org; Sat, 18 Mar 2017 20:31:27 +0100
Original-Received: by mail-pf0-f197.google.com with SMTP id o126sf187872209pfb.2
        for <gclcip-std-proposals@m.gmane.org>; Sat, 18 Mar 2017 12:31:33 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=isocpp-org.20150623.gappssmtp.com; s=20150623;
        h=date:from:to:message-id:subject:mime-version:x-original-sender
         :reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group
         :list-post:list-help:list-archive:list-subscribe:list-unsubscribe;
        bh=HTiQCId3Zwve+ChZt/aV+PT7j6X/HXaD6V4JJyQOLXg=;
        b=j1M3I/5YV/GP9GiYnppjbO4sN7ylLe5HO37KP4O9oKPwQP0a1jcpE2n8YkFJ/lW65r
         5DBXKPNucOYYw7uQ5DrLIoWOASPrp1YpN4HxDoY7MuwGbS44YyYZeHL+FvZkg6dWJETX
         W7G7A5JokURFNZWV/+9AGFBr54+Xu3H/BpEyLADsAkwbHAY20HQSvroljFOlkOvWwPGO
         0A72W+3PM0cNtvheUoYQf9Z+WU39gifQS8koBGlgpDKyTA4NxOPDhv4Rj59TAQHTmZZa
         Ix56GvNi7XjxXMGeVcH2fozy+NNtTWSi4K81/u1gCS20ehYE1K8CF9TPUJGcFSsFqUdr
         V+uw==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=date:from:to:message-id:subject:mime-version:x-original-sender
         :reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group
         :list-post:list-help:list-archive:list-subscribe:list-unsubscribe;
        bh=HTiQCId3Zwve+ChZt/aV+PT7j6X/HXaD6V4JJyQOLXg=;
        b=hn3nGRs7xPlkE+COr7WHaAMr9qbEZUIhCSBkVUJFI5pCMiDEC/TACTsopZg3oaOQTU
         eeHA+2YU8F3s3Snptnv41b2A+TYysnyKDZfodv7zJX+kmefTIvAeQAOg2C8nF7uM91/v
         d/Ty9AZYZ4TllBJ+5TjE3J8WqMLn59z6aPeWwEeWGdQ4QZBCKZDuw/Fdo+AiUTaeCXn0
         JMBkKaxKiGxQUoFs6WJrFV8fXH0M+MdHhjXvPMVqQyOf8jn4bfhyK1vqo8TJ5R5V23bo
         4IUMybVIVzR6KgWfw821bCIk0jvzeg1sjscqbOcs4+R/+q+LTgJYY217NzEmxSW1WwVF
         E4Ag==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:date:from:to:message-id:subject:mime-version
         :x-original-sender:reply-to:precedence:mailing-list:list-id
         :x-spam-checked-in-group:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=HTiQCId3Zwve+ChZt/aV+PT7j6X/HXaD6V4JJyQOLXg=;
        b=HupvmTsoDR801zhrpYiykPGElbCdH/D6XISZj98tFW6ZojpTc3irmHrOJrReOc2lOt
         1p8NM71zCqSVRjNlHQVanOwdSsZbjFkNMdVRuBt8/ur2MUi3mAv5ucpxXzFXxc1Y6jmh
         YuFl5B45zL+Z/HdVMWwzkqkSPOXCli6y2Nr76LQjgw3JhfmVo6iAOXwon3wrnAzQuTFy
         2NDYYaT4kWDsOpa1yXRvpqyJLl4UCVc2enmrsmsFDbWUMikEOTHj3Gn1d2qCTqM3xF+p
         fyfTIEk84/DnJLonJrGppFzG1J/1KjXdw9e+Mcgf72RX3l09RyXs12VAbvfshZitgBV9
         t/KA==
X-Gm-Message-State: AFeK/H29k6jMELND5w1JRhTw5kCZS1SC5J8npS5rOTFjKoyj829HOEsp4HUa6nTxZYDB+A==
X-Received: by 10.99.113.69 with SMTP id b5mr10249208pgn.161.1489865493123;
        Sat, 18 Mar 2017 12:31:33 -0700 (PDT)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 10.157.41.33 with SMTP id d30ls10927384otb.17.gmail; Sat, 18 Mar
 2017 12:31:32 -0700 (PDT)
X-Received: by 10.157.11.143 with SMTP id 15mr2276837oth.11.1489865492438;
        Sat, 18 Mar 2017 12:31:32 -0700 (PDT)
X-Original-Sender: redradist@gmail.com
Precedence: list
Mailing-list: list std-proposals@isocpp.org; contact std-proposals+owners@isocpp.org
List-ID: <std-proposals.isocpp.org>
X-Google-Group-Id: 399137483710
List-Post: <https://groups.google.com/a/isocpp.org/group/std-proposals/post>, <mailto:std-proposals@isocpp.org>
List-Help: <https://support.google.com/a/isocpp.org/bin/topic.py?topic=25838>, <mailto:std-proposals+help@isocpp.org>
List-Archive: <https://groups.google.com/a/isocpp.org/group/std-proposals/>
List-Subscribe: <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>,
 <mailto:std-proposals+subscribe@isocpp.org>
List-Unsubscribe: <mailto:googlegroups-manage+399137483710+unsubscribe@googlegroups.com>,
 <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>
Xref: news.gmane.org gmane.comp.lang.c++.isocpp.proposals:31677
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/31677>

------=_Part_523_302603043.1489865492046
Content-Type: multipart/alternative; 
	boundary="----=_Part_524_1738359098.1489865492046"

------=_Part_524_1738359098.1489865492046
Content-Type: text/plain; charset=UTF-8



Hi everyone,


My proposal is to simplify virtual inheritance rules. Consider the 
following class hierarchy:

<https://lh3.googleusercontent.com/-h-cp0qNBSRI/WM2Ks4N6-3I/AAAAAAAAFQo/tvd17HoV09U2dPcY6XfzaxLm3K2ITBkrwCLcB/s1600/Simplify%2Brules%2Bfor%2Bvirtual%2Binheritance.png>


and the following code:

    class VirtualBase
    {
    public:
       VirtualBase(std::string & str)
       {

       }
    };

    class Derived0 : virtual public VirtualBase
    {
    public:
       Derived0(std::string & str)
          : VirtualBase(str)
       {

       }
    };

    class Derived1 : virtual public VirtualBase
    {
    public:
       Derived1(std::string & str)
          : VirtualBase(str)
       {

       }
    };

    class ComposedDerived
       : public Derived0
       , public Derived1
    {
    public:
       ComposedDerived(std::string & str)
          : Derived0(str)
          , Derived1(str)
          , VirtualBase(str)
       {

       }
    };

Let's inherit from ComposedDerived again:

    class ComposedDerivedDerived
       : public ComposedDerived
       , public NewClass
    {
    public:
       ComposedDerivedDerived(std::string & str)
         : VirtualBase(str)
       {

       }
    };

I want to simplify it like the following:

    class ComposedDerivedDerived
       : public ComposedDerived
       , public NewClass
    {
    public:
       ComposedDerivedDerived(std::string & str) // Here is no 
VirtualBase(str)
       {

       }
    };

*Proposal is the following:*
   *Require to specify constructor for VirtualBase only if compiler find 
more the one path of virtual inheritance like for C3 (on diagram) or 
ComposedDerived (in code) classes*

-- 
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/6aa2e439-345e-4f04-8843-f38bb7b825b2%40isocpp.org.

------=_Part_524_1738359098.1489865492046
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><p class=3D"separator" style=3D"clear: both;">Hi everyone,=
</p><p class=3D"separator" style=3D"clear: both;"><br></p><p class=3D"separ=
ator" style=3D"clear: both;">My proposal is to simplify virtual inheritance=
 rules. Consider the following class hierarchy:</p><div><br></div><p class=
=3D"separator" style=3D"text-align: center; clear: both;"><a imageanchor=3D=
"1" href=3D"https://lh3.googleusercontent.com/-h-cp0qNBSRI/WM2Ks4N6-3I/AAAA=
AAAAFQo/tvd17HoV09U2dPcY6XfzaxLm3K2ITBkrwCLcB/s1600/Simplify%2Brules%2Bfor%=
2Bvirtual%2Binheritance.png" style=3D"margin-left: 1em; margin-right: 1em;"=
><img src=3D"https://lh3.googleusercontent.com/-h-cp0qNBSRI/WM2Ks4N6-3I/AAA=
AAAAAFQo/tvd17HoV09U2dPcY6XfzaxLm3K2ITBkrwCLcB/s320/Simplify%2Brules%2Bfor%=
2Bvirtual%2Binheritance.png" border=3D"0" width=3D"261" height=3D"320"></a>=
</p><div><br></div><br><div>and the following code:</div><div><br></div><di=
v><div>=C2=A0 =C2=A0 class VirtualBase</div><div>=C2=A0 =C2=A0 {</div><div>=
=C2=A0 =C2=A0 public:</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0VirtualBase(std:=
:string &amp; str)</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0{</div><div><br></d=
iv><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0}</div><div>=C2=A0 =C2=A0 };</div><div><=
br></div><div>=C2=A0 =C2=A0 class Derived0 : virtual public VirtualBase</di=
v><div>=C2=A0 =C2=A0 {</div><div>=C2=A0 =C2=A0 public:</div><div>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0Derived0(std::string &amp; str)</div><div>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 : VirtualBase(str)</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0{</div><div><br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0}</div><div>=C2=A0=
 =C2=A0 };</div><div><br></div><div>=C2=A0 =C2=A0 class Derived1 : virtual =
public VirtualBase</div><div>=C2=A0 =C2=A0 {</div><div>=C2=A0 =C2=A0 public=
:</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0Derived1(std::string &amp; str)</div=
><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : VirtualBase(str)</div><div>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0{</div><div><br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0}</div><div>=C2=A0 =C2=A0 };</div><div><br></div><div>=C2=A0 =C2=A0 clas=
s ComposedDerived</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0: public Derived0</d=
iv><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0, public Derived1</div><div>=C2=A0 =C2=
=A0 {</div><div>=C2=A0 =C2=A0 public:</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
ComposedDerived(std::string &amp; str)</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 : Derived0(str)</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 , D=
erived1(str)</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 , VirtualBase(str=
)</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0{</div><div><br></div><div>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0}</div><div>=C2=A0 =C2=A0 };</div></div><div><br></div>=
<div>Let&#39;s inherit from ComposedDerived again:</div><div><br></div><div=
><div>=C2=A0 =C2=A0 class ComposedDerivedDerived</div><div>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0: public ComposedDerived</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
, public NewClass<br></div><div>=C2=A0 =C2=A0 {</div><div>=C2=A0 =C2=A0 pub=
lic:</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0ComposedDerivedDerived(std::strin=
g &amp; str)</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0: VirtualBase(str)=
<br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0{</div><div><br></div><div>=C2=A0=
 =C2=A0 =C2=A0 =C2=A0}</div><div>=C2=A0 =C2=A0 };</div></div><div><br></div=
><div>I want to simplify it like the following:</div><div><div><br></div><d=
iv><div>=C2=A0 =C2=A0 class ComposedDerivedDerived</div><div>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0: public ComposedDerived</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
, public NewClass</div><div>=C2=A0 =C2=A0 {</div><div>=C2=A0 =C2=A0 public:=
</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0ComposedDerivedDerived(std::string &a=
mp; str) // Here is no VirtualBase(str)</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0{</div><div><br></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0}</div><div>=C2=A0=
 =C2=A0 };</div></div></div><div><br></div><div><span style=3D"background-c=
olor: rgb(255, 255, 0);"><b>Proposal is the following:</b></span></div><div=
>=C2=A0 =C2=A0<b>Require to specify constructor for VirtualBase only if com=
piler find more the one path of virtual inheritance like for C3 (on diagram=
) or ComposedDerived (in code) classes</b></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/6aa2e439-345e-4f04-8843-f38bb7b825b2%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/6aa2e439-345e-4f04-8843-f38bb7b825b2=
%40isocpp.org</a>.<br />

------=_Part_524_1738359098.1489865492046--

------=_Part_523_302603043.1489865492046--

.
