<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">Anyone?<br>
      <br>
      On 16/04/15 06:25, Peter Stirling wrote:<br>
    </div>
    <blockquote cite="mid:552F47C1.4080506@pjstirling.plus.com"
      type="cite">
      <meta content="text/html; charset=windows-1252"
        http-equiv="Content-Type">
      <div class="moz-cite-prefix">This does sound promising, but I'm
        not sure how to make use of it.<br>
        <br>
        At the moment my walker (which is based on clang::ASTConsumer)
        has a handler for class templates that looks like:<br>
        <br>
        void Walker::TraverseClassTemplate(clang::ClassTemplateDecl
        const* d) {<br>
          TRACE(1, "walk template " + getDeclMetadataString(d));<br>
        <br>
          bool was = inInstantiation;<br>
          inInstantiation = true;<br>
        <br>
          for(auto decl : d->specializations()) {<br>
            visitor->RequestCompleteType(decl);<br>
            TraverseCXXRecord(decl);<br>
          }<br>
        <br>
          inInstantiation = was;<br>
        }<br>
        <br>
        Visitor::RequestCompleteType() calls Sema::RequireCompleteType()
        (which IMO has the wrong name, it returns false on what I would
        consider, from the name, success).<br>
        <br>
        So, I don't construct the specializations for methods directly
        in my code, I assume that some of the instantiation is performed
        by RequireCompleteType(), but surely if I checked for SFINAE at
        that level then I would lose EVERY methods for std::pair<int
        const, int const> and not just the ones that involve
        mutation?<br>
        <br>
        On 14/04/15 18:26, Richard Smith wrote:<br>
      </div>
      <blockquote
cite="mid:CAOfiQq=CxiFBFdnC3gVTUPAPH7mFCWvm0iTD5N25cJsJQ59CLg@mail.gmail.com"
        type="cite">
        <div dir="ltr">
          <div class="gmail_extra">
            <div class="gmail_quote">On Tue, Apr 14, 2015 at 8:38 AM,
              Reid Kleckner <span dir="ltr"><<a
                  moz-do-not-send="true" href="mailto:rnk@google.com"
                  target="_blank">rnk@google.com</a>></span> wrote:<br>
              <blockquote class="gmail_quote" style="margin:0 0 0
                .8ex;border-left:1px #ccc solid;padding-left:1ex">
                <div dir="ltr">Sounds a lot like a SFINAE test. Assuming
                  you already have an AST with the class template
                  instantiation, then you'd attempt to instantiate the
                  assignment operator inside a SFINAETrap. Instantiation
                  will either pass or fail and you'll get your answer,
                  and you should be able to continue compilation or
                  further queries normally.</div>
              </blockquote>
              <div><br>
              </div>
              <div>I think the above is about the best that you can do.</div>
              <div><br>
              </div>
              <div>One note: if an error occurs outside of the immediate
                context of the substitution, a SFINAETrap will not
                suppress it (which is actually a good thing in this
                case, because you cannot continue compilation normally
                after such an error -- any part of the AST that failed
                may be marked invalid, suppressing further errors in
                other contexts).</div>
              <div><br>
              </div>
              <blockquote class="gmail_quote" style="margin:0 0 0
                .8ex;border-left:1px #ccc solid;padding-left:1ex">
                <div class="HOEnZb">
                  <div class="h5">
                    <div class="gmail_extra">
                      <div class="gmail_quote">On Mon, Apr 13, 2015 at
                        9:57 PM, Peter Stirling <span dir="ltr"><<a
                            moz-do-not-send="true"
                            href="mailto:peter@pjstirling.plus.com"
                            target="_blank">peter@pjstirling.plus.com</a>></span>
                        wrote:<br>
                        <blockquote class="gmail_quote" style="margin:0
                          0 0 .8ex;border-left:1px #ccc
                          solid;padding-left:1ex">Hi,<br>
                          <br>
                          Is there a way to ask clang whether a method
                          for an instantiation of a class template would
                          be an error to call? (I only need yes/no)<br>
                          <br>
                          For example:<br>
                          <br>
                          std::pair has assignment operators defined,
                          but for the instantiation std::pair<int
                          const, int const> calling the assignment
                          operators is an error, because you can't
                          assign to int const.<br>
                          <br>
                          If clang can't tell me this, I'm looking at
                          generating a translation unit with a call to
                          the method, and then checking whether there
                          was an error compiling it. Given that I will
                          need to do this once per method, per
                          instantiation, per template, (which looks to
                          be in the thousands based on a test I just
                          did) what is the best way to do this?<br>
_______________________________________________<br>
                          cfe-dev mailing list<br>
                          <a moz-do-not-send="true"
                            href="mailto:cfe-dev@cs.uiuc.edu"
                            target="_blank">cfe-dev@cs.uiuc.edu</a><br>
                          <a moz-do-not-send="true"
                            href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev"
                            target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
                        </blockquote>
                      </div>
                      <br>
                    </div>
                  </div>
                </div>
                <br>
                _______________________________________________<br>
                cfe-dev mailing list<br>
                <a moz-do-not-send="true"
                  href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
                <a moz-do-not-send="true"
                  href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev"
                  target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
                <br>
              </blockquote>
            </div>
            <br>
          </div>
        </div>
      </blockquote>
      <br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
cfe-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>