Hi, as agreed, I regtested on x86_64-linux the below diagnostic tweak.
Thanks, Paolo. //////////////////////////
/cp 2013-05-16 Paolo Carlini <paolo.carl...@oracle.com> PR c++/17314 * call.c (enforce_access): Improve protected access error message. /testsuite 2013-05-16 Paolo Carlini <paolo.carl...@oracle.com> PR c++/17314 * g++.dg/inherit/access9.C: New.
Index: cp/call.c =================================================================== --- cp/call.c (revision 198962) +++ cp/call.c (working copy) @@ -5707,7 +5707,7 @@ enforce_access (tree basetype_path, tree decl, tre if (TREE_PRIVATE (decl)) error ("%q+#D is private", diag_decl); else if (TREE_PROTECTED (decl)) - error ("%q+#D is protected", diag_decl); + error ("%q+#D, declared protected, is inaccessible", diag_decl); else error ("%q+#D is inaccessible", diag_decl); error ("within this context"); Index: testsuite/g++.dg/inherit/access9.C =================================================================== --- testsuite/g++.dg/inherit/access9.C (revision 0) +++ testsuite/g++.dg/inherit/access9.C (working copy) @@ -0,0 +1,16 @@ +// PR c++/17314 + +class A +{ +protected: + A(){} // { dg-error "declared protected" } +}; + +class B : virtual A {}; + +class C : public B {}; // { dg-error "within this context" } + // { dg-message "deleted" "" { target c++11 } 11 } +int main () +{ + C c; // { dg-message "required here" "" { target c++98 } } +} // { dg-error "deleted" "" { target c++11 } 15 }