[PATCH] D98477: [ADT] Add IntrusiveVariant
    Scott Linder via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Fri Mar 19 15:14:53 PDT 2021
    
    
  
scott.linder added a comment.
Thank you for taking a look @whisperity! I'm glad there is interested from others in the new type, I was worried at first it may be too niche of a use.
I didn't notice your comments until late today, but next week I will make a pass over them, respond, and update the patch.
I had intended to add more potentially-interested reviewers, possibly by posting to llvm-dev, but I was also in the process of rebasing the patchset which precipitated me factoring this out into `include/ADT` and wanted to make sure it was at the very least usable in that context, so thank you for adding some!
I'm also leaving a few comments I had already drafted as a reminder to myself.
================
Comment at: llvm/include/llvm/ADT/IntrusiveVariant.h:215
+  UnionImpl(const UnionImpl &) = default;
+  UnionImpl(UnionImpl &) = default;
+  ~UnionImpl() = default;
----------------
Should be a move constructor?
================
Comment at: llvm/include/llvm/ADT/IntrusiveVariant.h:257
+template <std::size_t Index, typename VisitorT, typename... VariantTs>
+struct TrappingIntrusiveVariantVisitor {
+  // We assume we are used in a context where either:
----------------
Maybe rename to `FallibleIntrusiveVariantVisitor` and `fallibleVisit` or `visitOrError`?
================
Comment at: llvm/unittests/ADT/IntrusiveVariantTest.cpp:27
+  IntrusiveVariant<A, B> V;
+  visit(makeVisitor([](A) {}, [](B) { FAIL(); }), V);
+  visit(makeVisitor([](B) { FAIL(); }, [](A) {}), V);
----------------
These could be simplified, e.g. `ASSERT_TRUE(V.hasAlternative<A>())`
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D98477/new/
https://reviews.llvm.org/D98477
    
    
More information about the llvm-commits
mailing list