dexonsmith added a comment.

I don't feel strongly, but IMO the code might be a bit harder to read/maintain 
with the explicit flush. I worry that it'd be easy to move the `flush()` away 
from the `return`. Not sure I'm right; could just be familiarity with `str()`.

Have you considered other options? Two below.

One option:

  std::string Result;
  {
    llvm::raw_string_ostream OS(Str);
    OS << ...;
  }
  return Result;

which in branch-free cases could shorten to:

  std::string Str;
  llvm::raw_string_ostream(Str) << ...;
  return Str;

I personally find the lifetime a bit more obvious than the explicit flush call.

Another option:

  std::string Result;
  llvm::raw_string_ostream OS(Str);
  OS << ...;
  return OS.take();

Where `raw_string_ostream::take()` is just `return std::move(str())`. It 
doesn't get NRVO, but I'm not sure that really matters in most of these places. 
Benefit is that it's a minimal change and the name is clear / matches other 
LLVM things.



================
Comment at: clang/lib/AST/DeclarationName.cpp:236-240
   std::string Result;
   llvm::raw_string_ostream OS(Result);
   OS << *this;
-  return OS.str();
+  OS.flush();
+  return Result;
----------------
For trivial cases like this, maybe it'd be worth creating a helper function 
that gets reused. Maybe called `llvm::raw_string_ostream::toString()`:
```
lang=c++
template <class T>
std::string raw_string_ostream::toString(const T &V) {
  std::string Result;
  raw_string_ostream(Result) << V;
  return Result;
}
```
and the code here would be:
```
lang=c++
  return llvm::raw_string_ostream::toString(*this);
```


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D115374/new/

https://reviews.llvm.org/D115374

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to