<div dir="ltr">I'd still prefer not to build another trait for this unless we have to - is there a reason we'd want is_pointer to not be true for some types that are PointerLike? (or conversely, for it to be true for some types that aren't PointerLike)</div><br><div class="gmail_quote"><div dir="ltr">On Sun, Aug 6, 2017 at 11:52 AM 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 inline comments.<br>
<br>
<br>
================<br>
Comment at: include/llvm/Support/PointerLikeTypeTraits.h:35<br>
+// Trait to check if T is pointer.<br>
+template<typename T><br>
+struct is_pointer { static const bool value = false; };<br>
----------------<br>
mgrang wrote:<br>
> Just checking if T is a complete type is not enough due to the presence of specialization for const T:<br>
> template <typename T> class PointerLikeTypeTraits<const T><br>
><br>
> In this case, for a const int the type is complete but it's not a pointer type. So to handle such cases I had to check for is_pointer too.<br>
We might as well not check for is_complete and just check for is_pointer, and then add more specialization for is_pointer of other ptr types (like shared, unique ptr, etc)?<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>