<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Apr 26, 2010, at 5:57 PM, John McCall wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Author: rjmccall<br>Date: Mon Apr 26 19:57:59 2010<br>New Revision: 102407<br><br>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=102407&view=rev">http://llvm.org/viewvc/llvm-project?rev=102407&view=rev</a><br>Log:<br>Make the InjectedClassNameType the canonical type of the current instantiation<br>of a class template or class template partial specialization.  That is to<br>say, in<br>  template <class T> class A { ... };<br>or<br>  template <class T> class B<const T*> { ... };<br>make 'A<T>' and 'B<const T*>' sugar for the corresponding InjectedClassNameType<br>when written inside the appropriate context.  This allows us to track the<br>current instantiation appropriately even inside AST routines.  It also allows<br>us to compute a DeclContext for a type much more efficiently, at some extra<br>cost every time we write a template specialization (which can be optimized,<br>but I've left it simple in this patch).<font class="Apple-style-span" color="#000000"><font class="Apple-style-span" color="#144FAE"><br></font></font></div></blockquote><br></div><div>Excellent, this is *way* cleaner than the previous "late" checking of template specialization types against the current instantiation.</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>- Doug</div></body></html>