OK, thanks.
On Wed, Jul 26, 2017 at 12:45 PM, Leonid Koppel <lkop...@uwaterloo.ca> wrote: > This patch addresses PR 67054 (duplicates 62310, 80851). An implicitly-deļ¬ned > inheriting constructor was wrongly considered deleted when it would > initialize a non-default-constructible member, even when a > brace-or-equal-initializer was present. > > The bug only affects deduction of the constructor's deletedness, not the > actual generation of the constructor, which is why (I hope!) the fix might be > so simple. > > Tested on x86_64-pc-linux-gnu native. > > Thanks, > Leo > > 2017-07-26 Leonid Koppel <lkop...@uwaterloo.ca> > > PR c++/67054 - Inheriting constructor with non-default-constructible > members > * method.c (walk_field_subobs) Consider member initializers (NSDMIs) > when > deducing an inheriting constructor. > > diff --git a/gcc/cp/method.c b/gcc/cp/method.c > index cca1b146917..8b07f526473 100644 > --- a/gcc/cp/method.c > +++ b/gcc/cp/method.c > @@ -1342,7 +1342,7 @@ walk_field_subobs (tree fields, tree fnname, > special_function_kind sfk, > if (bad && deleted_p) > *deleted_p = true; > } > - else if (sfk == sfk_constructor) > + else if (sfk == sfk_constructor || sfk == sfk_inheriting_constructor) > { > bool bad; > > diff --git a/gcc/testsuite/g++.dg/cpp0x/inh-ctor29.C > b/gcc/testsuite/g++.dg/cpp0x/inh-ctor29.C > new file mode 100644 > index 00000000000..8e31f739d74 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/cpp0x/inh-ctor29.C > @@ -0,0 +1,23 @@ > +// PR c++/67054 > +// { dg-do compile { target c++11 } } > + > +struct A > +{ > + A(int) {} > +}; > + > +struct C > +{ > + C(int) {} > +}; > + > +struct B : A > +{ > + using A::A; > + C c = 42; > +}; > + > +int main() > +{ > + B b = 24; > +}