[clang] [Clang] Ensure default arguments in friend declarations are only allowed in defining declarations to prevent multiple reachable declarations (PR #113777)
Matheus Izvekov via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 6 14:37:52 PST 2024
================
@@ -185,3 +185,21 @@ template<typename T> struct S {
friend void X::f(T::type);
};
}
+
+namespace GH113324 {
+template <typename = int> struct ct {
+ friend void f1(ct, int = 0); // expected-error {{friend declaration specifying a default argument must be a definition}}
+ friend void f2(ct a, ct = decltype(a){ }); // expected-error {{friend declaration specifying a default argument must be a definition}}
+};
+
+template<class T> using alias = int;
+template<typename T> struct C {
+ friend void f3(C, int a = alias<T&>(1)); // expected-error {{friend declaration specifying a default argument must be a definition}}
----------------
mizvekov wrote:
```suggestion
// FIXME: We miss diagnosing the default argument instantiation failure (forming reference to void)
friend void f3(C, int a = alias<T&>(1)); // expected-error {{friend declaration specifying a default argument must be a definition}}
```
https://github.com/llvm/llvm-project/pull/113777
More information about the cfe-commits
mailing list