1

I have a set of classes like this:

class Member {
public:
  Member(int val) : val_(val) {}
private:
  int val_;
};

class A {
public:
  A(const Member& member) : member_(member) {}

private:
  Member member_;
};

class B : public A {
  using A::A;
private:
  Member other_member_{10}; // <--- commenting this line fixes errors
};

class C : public B {
public:
  C(const Member& member) : B(member) {}
};

And when I'm trying to construct an object of class C:

int main(int argc, char** argv) {
  Member member(12);
  C c(member);
  return 0;
}

I get the following errors:

~/work/src/test/main.cpp: In constructor ‘C::C(const Member&)’:                                                                      
~/work/src/test/main.cpp:26:37: error: use of deleted function ‘B::B(const Member&)’                                                 
   C(const Member& member) : B(member) {}                                                                                                      
                                     ^                                                                                                         
~/work/src/test/main.cpp:19:12: note: ‘B::B(const Member&)’ is implicitly deleted because the default definition would be ill-formed:
   using A::A;                                                                                                                                 
            ^                                                                                                                                  
~/work/src/test/main.cpp:19:12: error: no matching function for call to ‘Member::Member()’                                           
some notes with candidates   

I know that using A::A should provide visibility for all base constructors, but as stated in the error message, that it is implicitly deleted...

So, why after add member with brace-initializer to class B I get these errors?

Thanks in advance.

Martin Reiche
  • 1,642
  • 1
  • 16
  • 27
Vasilii
  • 13
  • 3

0 Answers0