<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Feb 1, 2015 at 12:47 PM, Benjamin Kramer <span dir="ltr"><<a href="mailto:benny.kra@googlemail.com" target="_blank">benny.kra@googlemail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: d0k<br>
Date: Sun Feb  1 14:47:51 2015<br>
New Revision: 227765<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=227765&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=227765&view=rev</a><br>
Log:<br>
Actually we can just inline the base typedef and use the injected class name for the base class.<br></blockquote><div><br></div><div>IIRC this will make MSVC angry.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Modified:<br>
    cfe/trunk/include/clang/AST/CanonicalType.h<br>
    cfe/trunk/include/clang/AST/DeclTemplate.h<br>
<br>
Modified: cfe/trunk/include/clang/AST/CanonicalType.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/CanonicalType.h?rev=227765&r1=227764&r2=227765&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/CanonicalType.h?rev=227765&r1=227764&r2=227765&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/AST/CanonicalType.h (original)<br>
+++ cfe/trunk/include/clang/AST/CanonicalType.h Sun Feb  1 14:47:51 2015<br>
@@ -382,20 +382,18 @@ namespace clang {<br>
 /// \brief Iterator adaptor that turns an iterator over canonical QualTypes<br>
 /// into an iterator over CanQualTypes.<br>
 template <typename InputIterator><br>
-class CanTypeIterator<br>
-    : public llvm::iterator_adaptor_base<<br>
+struct CanTypeIterator<br>
+    : llvm::iterator_adaptor_base<<br>
           CanTypeIterator<InputIterator>, InputIterator,<br>
           typename std::iterator_traits<InputIterator>::iterator_category,<br>
           CanQualType,<br>
           typename std::iterator_traits<InputIterator>::difference_type,<br>
           CanProxy<Type>, CanQualType> {<br>
-  typedef typename CanTypeIterator::iterator_adaptor_base BaseT;<br>
-<br>
-public:<br>
   CanTypeIterator() {}<br>
-  explicit CanTypeIterator(InputIterator Iter) : BaseT(std::move(Iter)) {}<br>
+  explicit CanTypeIterator(InputIterator Iter)<br>
+      : CanTypeIterator::iterator_adaptor_base(std::move(Iter)) {}<br>
<br>
-  CanQualType operator*() const { return CanQualType::CreateUnsafe(*BaseT::I); }<br>
+  CanQualType operator*() const { return CanQualType::CreateUnsafe(*this->I); }<br>
   CanProxy<Type> operator->() const;<br>
 };<br>
<br>
<br>
Modified: cfe/trunk/include/clang/AST/DeclTemplate.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclTemplate.h?rev=227765&r1=227764&r2=227765&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclTemplate.h?rev=227765&r1=227764&r2=227765&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/AST/DeclTemplate.h (original)<br>
+++ cfe/trunk/include/clang/AST/DeclTemplate.h Sun Feb  1 14:47:51 2015<br>
@@ -552,23 +552,20 @@ protected:<br>
<br>
   template <typename EntryType, typename SETraits = SpecEntryTraits<EntryType>,<br>
             typename DeclType = typename SETraits::DeclType><br>
-  class SpecIterator<br>
-      : public llvm::iterator_adaptor_base<<br>
+  struct SpecIterator<br>
+      : llvm::iterator_adaptor_base<<br>
             SpecIterator<EntryType, SETraits, DeclType>,<br>
             typename llvm::FoldingSetVector<EntryType>::iterator,<br>
             typename std::iterator_traits<typename llvm::FoldingSetVector<<br>
                 EntryType>::iterator>::iterator_category,<br>
             DeclType *, ptrdiff_t, DeclType *, DeclType *> {<br>
-    typedef typename SpecIterator::iterator_adaptor_base BaseT;<br>
-<br>
-  public:<br>
     SpecIterator() {}<br>
     explicit SpecIterator(<br>
         typename llvm::FoldingSetVector<EntryType>::iterator SetIter)<br>
-        : BaseT(std::move(SetIter)) {}<br>
+        : SpecIterator::iterator_adaptor_base(std::move(SetIter)) {}<br>
<br>
     DeclType *operator*() const {<br>
-      return SETraits::getMostRecentDecl(&*BaseT::I);<br>
+      return SETraits::getMostRecentDecl(&*this->I);<br>
     }<br>
     DeclType *operator->() const { return **this; }<br>
   };<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>