In many instances I wished I was able to do this:

 

struct Foo
{
   int a;

   int b = 0;    

};

struct Bar : public Foo

{
  int c;
};

 

Bar var{.a = 1, .b=2, .c=3}

 

That’s it, none of them define explicit constructors, I just want to initialize data in my struct, I should be able to do it.

 

To that I have a few notes:

1. “using” keyword shouldn’t be necessary

2. you shouldn’t be allowed to do this if data is private. On your example you are changing private data, this is an anti-pattern, should not be allowed. Sure, you made the implicit constructor public, but the data members are not public.

 

I also thing that the following:

 

Bar var{1, 2, 3};

 

Is an abomination of the language and it should die, designated initializer is superior and I think should be used preferentially, if the proposal skips this I think it would be for the better.

 

My 2c

 

 

From: Std-Proposals <std-proposals-bounces@lists.isocpp.org> On Behalf Of David Ledger via Std-Proposals
Sent: Sunday, April 7, 2024 08:24
To: Zhihao Yuan <zy@miator.net>; std-proposals@lists.isocpp.org
Cc: David Ledger <DavidLedger@LIVE.COM.AU>
Subject: Re: [std-proposals] Fixing Inheritance of Constructors from Aggregate bases

 

Hello!

Neither option A nor B would allow for designated initializers being using for non-inherited objects.

 

Option B proposes behaviour consistent with inheritance of constructors (for example):

    struct Foo
    {
        Foo(int, int);
    };

    struct Bar : Foo
    {
        using Foo::Foo;
        int a = 0;
    };

It would not be possible to do this:

    auto bar = Bar{1, 2, 3};

Or this:

    auto bar = Bar{Foo{1, 2}, 3};

Once the `using Foo::Foo` is applied, all data members and base classes are default initialized (except the base which the constructor was inherited from).

Kind regards,

    David Ledger

From: Zhihao Yuan <zy@miator.net>
Sent: Sunday, April 7, 2024 4:00 PM
To: std-proposals@lists.isocpp.org
Cc: David Ledger <DavidLedger@LIVE.COM.AU>
Subject: Re: [std-proposals] Fixing Inheritance of Constructors from Aggregate bases

 

If I have

 

    struct Foo { int a, b; }

    struct Bar : Foo { using Foo::Foo; int c; }

 

Can I do

 

    auto bar = Bar{.a = 1, .b = 2, .c = 3};  // ?

 

if so, I think it might remove some concerns

over Designated-initializers for Base Classes (open-std.org)

 

--

Zhihao Yuan, ID lichray
The best way to predict the future is to invent it.
_______________________________________________

 

On Saturday, April 6th, 2024 at 9:36 PM, David Ledger via Std-Proposals <std-proposals@lists.isocpp.org> wrote:

Hello everybody!!

Right now, this will not compile:

 

struct Foo { int a, b; }
struct Bar : Foo { using Foo::Foo; }
auto bar = Bar{1, 2}; // ERROR
 

Which is confusing and unintuitive. This paper proposes an improvement to this behaviour.

https://seppeon.gitlab.io/cpp-proposals/inheritance-of-aggregate-initialization.html#_abstract

 

Regards,

David Ledger