@@ -2057,7 +2057,9 @@ add_function_candidate (struct z_candidate **candidates,
{
tree ptype = non_reference (TREE_VALUE (parmlist));
tree dtype = DECL_CONTEXT (fn);
- if (reference_related_p (ptype, dtype))
+ tree btype = DECL_INHERITED_CTOR_BASE (fn);
+ if (reference_related_p (ptype, dtype)
+ && reference_related_p (btype, ptype))
{
viable = false;
reason = inherited_ctor_rejection ();
new file mode 100644
@@ -0,0 +1,21 @@
+// PR c++/79503
+// { dg-do compile { target c++11 } }
+
+struct payload {};
+
+struct base: private payload {
+ base(payload) {}
+};
+
+struct derived: base {
+ using base::base;
+};
+
+int main()
+{
+ payload data;
+ // error: no matching function for call to 'derived::derived(payload&)'
+ // note: candidate: base::base(payload)
+ // note: an inherited constructor is not a candidate for initialization from an expression of the same or derived type
+ derived demo(data);
+}