<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Nov 9, 2012, at 19:23 , Douglas Gregor <<a href="mailto:dgregor@apple.com">dgregor@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><meta http-equiv="Content-Type" content="text/html charset=us-ascii"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Nov 9, 2012, at 6:53 PM, Jordan Rose <<a href="mailto:jordan_rose@apple.com">jordan_rose@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><meta http-equiv="Content-Type" content="text/html charset=us-ascii"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>This isn't actually a circular dependence, either. IntervalMap<>::const_iterator is inheriting from std::iterator.</div><div><br></div><div>I don't see anything obviously wrong with your patch, though...</div></div></blockquote><div><br></div>I see the problem in my patch. CXXRecordDecl::forallBases has a ridiculously non-intuitive API.</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">       </span>- Doug</div></div></blockquote><br></div><div>Here's the reduced test-case from LLVM (relying on the X<T> already in your rdar12629723 namespace):</div><div><br></div><div><div style="margin: 0px; font-size: 11px; font-family: Menlo; color: rgb(187, 44, 162); "><span style="color: #000000">  </span>template<span style="color: #000000"><</span>class<span style="color: #000000"> T></span></div><div style="margin: 0px; font-size: 11px; font-family: Menlo; ">  <span style="color: #bb2ca2">struct</span> Y {</div><div style="margin: 0px; font-size: 11px; font-family: Menlo; ">    <span style="color: #bb2ca2">struct</span> A;</div><div style="margin: 0px; font-size: 11px; font-family: Menlo; ">    <span style="color: #bb2ca2">struct</span> B;</div><div style="margin: 0px; font-size: 11px; font-family: Menlo; ">  };</div><p style="margin: 0px; font-size: 11px; font-family: Menlo; min-height: 13px; ">  <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-size: 11px; font-family: Menlo; color: rgb(187, 44, 162); "><span style="color: #000000">  </span>template<span style="color: #000000"><</span>class<span style="color: #000000"> T></span></div><div style="margin: 0px; font-size: 11px; font-family: Menlo; ">  <span style="color: #bb2ca2">struct</span> Y<T>::A : <span style="color: #bb2ca2">public</span> X<T> { };</div><div style="margin: 0px; font-size: 11px; font-family: Menlo; min-height: 13px; "><br></div><div style="margin: 0px; font-size: 11px; font-family: Menlo; color: rgb(187, 44, 162); "><span style="color: #000000">  </span>template<span style="color: #000000"><</span>class<span style="color: #000000"> T></span></div><div style="margin: 0px; font-size: 11px; font-family: Menlo; ">  <span style="color: #bb2ca2">struct</span> Y<T>::B : <span style="color: #bb2ca2">public</span> <span style="color: #008400">/*Y<T>::*/</span>A { };</div><div><br></div></div><br></body></html>