<p dir="ltr"><br>
On Aug 24, 2014 1:06 PM, "Jacob Carlborg" <<a href="mailto:doob@me.com">doob@me.com</a>> wrote:<br>
><br>
> On 2014-08-23 22:42, David Blaikie wrote:<br>
>><br>
>> This is how C behaves - the const has no effect on the function type there<br>
><br>
><br>
> So a typedef strips const for parameters of a value type? But otherwise it's not stripped, seems odd.</p>
<p dir="ltr">Try writing these two functions in one file:</p>
<p dir="ltr">  void func(int) {}<br>
  void func(const int) {}</p>
<p dir="ltr">And it won't compile (but if you add * yo each parameter it will) because the functions have the same type.</p>
<p dir="ltr">This is because the const has no effect on the caller - in either case the caller can pass a const or non-const int because it will be copied (not modified) to the caller.</p>
<p dir="ltr">Whereas if there's indirection it matters greatly yo the caller whether tit gave a pointer through which data could be modified or not.</p>
<p dir="ltr">But this const doesn't affect the caller (so these are the same function:</p>
<p dir="ltr">  void func(int *)<br>
  void func(int * const)</p>
<p dir="ltr">Because the pointer (which is copied) is constant, but what it points to is still non-const in both cases.</p>
<p dir="ltr">><br>
><br>
> -- <br>
> /Jacob Carlborg<br>
><br>
> _______________________________________________<br>
> cfe-dev mailing list<br>
> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</p>