rjmccall added inline comments.
================
Comment at: clang/include/clang/Basic/PartialDiagnostic.h:66
+ return *this;
+ }
+
----------------
yaxunl wrote:
> rjmccall wrote:
> > Why are these template operators necessary? The LHS of the `<<` should
> > convert to a base reference type just fine.
> There are lots of usage patterns expecting the derived class after streaming,
> e.g.
>
> ```
> void foo(PartialDiagnostic& PD);
> foo(PD << X << Y);
> ```
I see. You could also just do this in the base operators by just making them
templates, e.g.
```
template <class Diagnostic>
std::enable_if_t<std::is_base_of_v<StreamingDiagnostic, Diagnostic>, const
Diagnostic &>
operator<<(const Diagnostic &D, ...) {
}
```
That way you'd never have these forwarding problems — but it would be more
boilerplate for each operator, so maybe it's a wash.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D84362/new/
https://reviews.llvm.org/D84362
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits