[clang] [Clang][Sema] Diagnose friend declarations with enum elaborated-type-specifier in all language modes (PR #80171)

Vlad Serebrennikov via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 7 10:52:07 PST 2024


================
@@ -1637,10 +1637,8 @@ def err_inline_namespace_std : Error<
 def err_unexpected_friend : Error<
   "friends can only be classes or functions">;
 def ext_enum_friend : ExtWarn<
-  "befriending enumeration type %0 is a C++11 extension">, InGroup<CXX11>;
-def warn_cxx98_compat_enum_friend : Warning<
-  "befriending enumeration type %0 is incompatible with C++98">,
-  InGroup<CXX98Compat>, DefaultIgnore;
+  "elaborated enumeration type cannot be a friend">,
----------------
Endilll wrote:

I can't say I particularly like any of the three ideas suggested:
> A friend enumeration type cannot be declared using an elaborated type specifier
> An elaborated type specifier starting with 'enum' cannot be declared as a friend

I find both not too actionable for people out of the loop on the Standard. Among those two options, I prefer the latter.

> ISO C++ does not permits this declaration to be declared as friend because 'enum E' is an elaborated specifier.

This is somewhat better, but isn't there an implication that elaborated type specifiers are not permitted in friend declarations?

> should we leave the current wording for the time being?

Sorry, I don't find the current wording `elaborated enumeration type cannot be a friend` acceptable.

https://github.com/llvm/llvm-project/pull/80171


More information about the cfe-commits mailing list