<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>