<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Sun, Jul 30, 2017 at 7:06 PM Mandeep Singh Grang via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">mgrang added a comment.<br>
<br>
> Was it not possible to use something more like what I'd suggested - that would've worked (I think) with PointerLikeTypeTraits? Or did that not seem to work out?<br>
<br>
Sounded like Richard had an idea of how to do it even more simply than my suggestion, maybe... (if we removed the base definition of PointerLikeTypeTraits & were able to test on the completeness of the class, rather than checking for the specific member as I'd done)<br>
<br>
@dblaikie I tried both ways. Checking is_pointer on a PointerLikeTypeTrait I again ran into compile errors due to incomplete types (similar to the ones I had mentioned earlier).<br>
I tried removing the base defintion of PointerLikeTypeTraits but ran into more compile errors (because now there is no sink for a T which is not specialized?). Like:<br>
<br>
  error: cannot initialize return object of type 'llvm::cl::OptionCategory *const' with an rvalue of type 'llvm::cl::OptionCategory **'<br>
        return PtrTraits::getFromVoidPointer(const_cast<void *>(Bucket[-1]));<br>
<br>
Also about using SFINAE to check type completeness, this thread states that it's possible but would be broken (what if the type is completed after the point you query it?):<br>
<a href="https://stackoverflow.com/questions/21119281/using-sfinae-to-check-if-the-type-is-complete-or-not" rel="noreferrer" target="_blank">https://stackoverflow.com/questions/21119281/using-sfinae-to-check-if-the-type-is-complete-or-not</a></blockquote><div><br>I'm pretty sure that's OK in this case - since the same rule is already true for specializations (you can't rely on the implicit specialization when you have an explicit specialization (of PointerLikeTypeTraits)) - so this won't be declared & become complete later, etc, I think... ?<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
<a href="https://reviews.llvm.org/D35043" rel="noreferrer" target="_blank">https://reviews.llvm.org/D35043</a><br>
<br>
<br>
<br>
</blockquote></div></div>