https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90137
--- Comment #2 from Konstantin Shegunov <kshegunov at gmail dot com> --- Yes, this is the error I get. What should happen instead is that compilation succeeds. Having the following as declaration in using.h: class DerivedPrivate; class Derived final : public Base { public: Derived(); // using Base::Base; ~Derived() override; private: std::unique_ptr<DerivedPrivate> d; }; And trivially defining it in using.cpp: Derived::Derived() { } compiles correctly, i.e. g++ -c -pipe -g -std=gnu++11 -Wall -W -fPIC -I. -o main.o main.cpp produces no error.