<div dir="ltr"><div dir="ltr">Hi David:<div><br></div><div>I'd actually like to use a custom parser in a tool I'm developing, parsing YAML files.  The partial fix for my purposes was:</div><div><br></div><div><div>--- a/llvm/include/llvm/Support/CommandLine.h</div><div>+++ b/llvm/include/llvm/Support/CommandLine.h</div><div>@@ -1044,7 +1044,7 @@ extern template class basic_parser<float>;</div><div> //--------------------------------------------------</div><div> // parser<std::string></div><div> //</div><div>-template <> class parser<std::string> final : public basic_parser<std::string> {</div><div>+template <> class parser<std::string> : public basic_parser<std::string> {</div><div> public:</div><div>   parser(Option &O) : basic_parser(O) {}</div><div><br></div><div>@@ -1062,6 +1062,8 @@ public:</div><div><br></div><div>   // An out-of-line virtual method to provide a 'home' for this class.</div><div>   void anchor() override;</div><div>+</div><div>+  virtual ~parser() = default;</div><div> };</div></div><div><br></div><div>If that's acceptable, I submit a patch.</div><div><br></div><div>thanks...</div><div>don</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Apr 18, 2019 at 1:56 PM David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Yeah, I think I did this a while back (& you're possibly not the only<br>
one who's hit this - might be worth a search on llvm-dev for previous<br>
threads).<br>
<br>
If you check the commit history, I think my original motivation was<br>
cleaning up the virtual dtor that wasn't used in LLVM by making the<br>
base class's dtor protected, and the derived classes final.<br>
<br>
It could be made virtual instead of protected/final - but without any<br>
use in LLVM, I'm not sure it's worth exposing this extension point &<br>
perhaps just updating the documentation is the best thing?<br>
<br>
On Thu, Apr 18, 2019 at 1:45 PM Don Hinton via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
><br>
> <a href="https://llvm.org/docs/CommandLine.html#writing-a-custom-parser" rel="noreferrer" target="_blank">https://llvm.org/docs/CommandLine.html#writing-a-custom-parser</a> describes how to implement a custom parser, but they're all marked `final`, so I can't inherit.<br>
><br>
> Is there a reason for this?  If not, I'll submit patch with tests.<br>
><br>
> thanks...<br>
> don<br>
><br>
><br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>