[PATCH] D119544: Deferred Concept Instantiation Implementation
Erich Keane via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu May 19 06:40:43 PDT 2022
erichkeane added a comment.
Herald added a reviewer: dang.
@rsmith pointed out https://eel.is/c++draft/temp#friend-9 which I think is supposed to fix the friend function issues:
> A non-template friend declaration with a requires-clause shall be a definition.
> A friend function template with a constraint that depends on a template parameter from an enclosing template shall be a definition.
> Such a constrained friend function or function template declaration does not declare the same function or function template as a declaration in any other scope.
To me, this says that
template<typename T>
struct S {
friend void foo() requires true {}
};
void bar() {
S<int> s;
S<float> s2;
}
Should be perfectly fine, and NOT a redefinition? At least this: https://godbolt.org/z/PaK1Yhn1E seems to show that all 3 compilers get this wrong currently? Or I'm misreading this.
It ALSO means that:
template<typename T>
struct S {
template<typename U>
friend void foo() requires constriant<T> {}
};
void bar() {
S<int> s;
S<float> s2;
}
is perfectly fine, and not a redefinition. (CURRENT Clang and GCC get this right, but MSVC seems to get it wrong: https://godbolt.org/z/a7dYezoPW)
HOWEVER, By reading the rule, a slightly DIFFERENT version of that
template<typename T>
struct S {
template<typename U>
friend void foo() requires constriant<U> {} // No longer relies on the enclosing template
};
void bar() {
S<int> s;
S<float> s2;
}
Is a redefinition. All 3 compilers diagnose this. https://godbolt.org/z/7qbYsb635
Do I have this right? I'm having trouble figuring out the implementation strategy here. It seems my SemaOverload.cpp changes would need to do special work to get example #1 to work, and I got close on #2 (with the exception of some assert in libc++). And #3 I probably had right?
Can someone else read the standard bit there and make sure I got a good spread of the issues and interpreted the prose correctly?
Thanks!
-Erich
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D119544/new/
https://reviews.llvm.org/D119544
More information about the cfe-commits
mailing list