usaxena95 added a comment.
> starting a line with an opening paren is pretty weird!)
I do not think this is weird. On the contrary, this is more readable to me and
separates the requires clause from the parameters list. For example this one
looks so much better:
// trunk.
template <typename T>
void func() {
auto x = []<typename U>
requires Foo<T> && Foo<T>(T t, U u) requires BarBar<U> && BarBar<U> ||
BarBar<U>
{
return u + t;
};
}
// patch.
template <typename T> void func() {
auto x = []<typename U>
requires Foo<T> && Foo<T>
(T t, U u)
requires BarBar<U> && BarBar<U> || BarBar<U>
{ return u + t; };
}
Discussion on wrapping the lambda body with single statement. FWIW: I do not
think this is a regression and we are fixing things as seen in my first example.
Another point:
While testing this patch, the following still fails to recognise. Might be
something special with `true`.
auto y = [&]<typename Callable>
requires true(Callable && callable)
{ static_cast<void>(callable); };
================
Comment at: clang/unittests/Format/TokenAnnotatorTest.cpp:1352
+
+ // Both at once? Probably not even valid.
+ Tokens = annotate("[] <typename T> requires Foo<T> (T t) requires Bar<T>
{}");
----------------
This is valid and is accepted by the compilers https://godbolt.org/z/EPbrWbrsv
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D145642/new/
https://reviews.llvm.org/D145642
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits