<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Aug 12, 2014 at 9:17 AM, cedlemo <span dir="ltr"><<a href="mailto:cedlemo@gmx.com">cedlemo@gmx.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

  
    
  
  <div bgcolor="#FFFFFF" text="#000000"><div class="">
    <div class="gmail_quote">On 11/08/2014 20:37, Richard Smith wrote:<br>
      <br>
      <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
        <div bgcolor="#FFFFFF" text="#000000">
          <p>according to the clang reference on type <a href="http://clang.llvm.org/docs/InternalsManual.html#canonical-types">http://clang.llvm.org/docs/InternalsManual.html#canonical-types</a>
            , I thought that the isCanonical() should return true when
            no typedef is involved.</p>
        </div>
      </blockquote>
      <div>No, there are lots of other things that can make a type
        non-canonical. <br>
      </div>
      <br>
    </div></div>
    Could you be a bit more specific ?</div></blockquote><div><br></div><div>Sure. Consider:</div><div><br></div><div>  int (x);</div><div><br></div><div>The type of x is not a BuiltinType; it's a ParenType whose canonical type is a BuiltinType. And given</div>
<div><br></div><div>  struct X { int n; };</div><div>  struct X x;</div><div><br></div><div>the type of x will probably be represented as an ElaboratedType whose canonical type is a RecordType.</div></div></div></div>