ilya-biryukov added inline comments.

================
Comment at: clangd/JSONRPCDispatcher.h:78
   llvm::Optional<json::Expr> ID;
+  std::unique_ptr<trace::Span> Tracer;
 };
----------------
ilya-biryukov wrote:
> sammccall wrote:
> > ilya-biryukov wrote:
> > > Why do we need `unique_ptr`? Are `Span`s non-movable?
> > Spans aren't movable, they have an explicitly declared destructor. (The 
> > copy constructor is only deprecated by this condition, but Span has a 
> > unique_ptr member).
> > 
> > We could make them movable, though it's not absolutely trivial (we need an 
> > extra bool to indicate that this is moved-from and the destructor should be 
> > a no-op).
> > 
> > I think wrapping them in a `unique_ptr` here is slightly simpler than 
> > implementing the right move semantics by hand, but LMK what you think.
> > We could make them movable, though it's not absolutely trivial (we need an 
> > extra bool to indicate that this is moved-from and the destructor should be 
> > a no-op).
> I kinda hate this part when dealing with movable objects, too. I still do 
> that, mostly to avoid heap allocs, but we're not on a hot path, so it's fine 
> both ways.
> We could use `llvm::Optional` instead of `unique_ptr` to get rid of the heap 
> alloc too.
Oh, sorry, `llvm::Optional` surely doesn't help here, it would still be 
non-movable. Forget what I said.


https://reviews.llvm.org/D40132



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

Reply via email to