<div dir="rtl"><div dir="ltr">Ok, back to std::equal replacement...</div><div dir="ltr"><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div dir="ltr">2015-08-18 1:27 GMT+03:00 Aaron Ballman <span dir="ltr"><<a href="mailto:aaron@aaronballman.com" target="_blank">aaron@aaronballman.com</a>></span>:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Mon, Aug 17, 2015 at 6:18 PM, Yaron Keren <<a href="mailto:yaron.keren@gmail.com">yaron.keren@gmail.com</a>> wrote:<br>
> +aaron, reid<br>
><br>
> Here is a patch disabling the iterator null pointer checking in Visual C++<br>
> debug mode. This makes std::equal behave as expected instead of asserting on<br>
> std::equal(nullpt,r nullptr, nullptr), saving an extra check just for Visual<br>
> C++ debug mode here and there.<br>
><br>
> It should not cause any practical problem debugging as if a null iterator is<br>
> actually dereferenced (as opposed to compared) the debugger will stop on<br>
> location.<br>
><br>
> What do you think?<br>
<br>
</span>Mildly terrified. :-) This also disables really useful debugging tools<br>
in other parts of the STL that have definitely found bugs for us in<br>
the past. A lot of <algorithm>, <istream>, <ostream>, <locale>,<br>
<memory>, <string>, and <utility> make use of _DEBUG_POINTER, which<br>
this patch would disable.<br>
<br>
I would *strongly* prefer to not disable that debugging functionality,<br>
especially since this runtime-level debugging has found bugs our own<br>
tests have not.<br>
<span class="HOEnZb"><font color="#888888"><br>
~Aaron<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
><br>
><br>
> 2015-08-17 23:45 GMT+03:00 Duncan P. N. Exon Smith <<a href="mailto:dexonsmith@apple.com">dexonsmith@apple.com</a>>:<br>
>><br>
>><br>
>> > On 2015-Aug-17, at 13:43, Yaron Keren <<a href="mailto:yaron.keren@gmail.com">yaron.keren@gmail.com</a>> wrote:<br>
>> ><br>
>> > I'm trying another approach. The non-null validation goes through a<br>
>> > macro defined to a function which possibly may be predefined to nothing.<br>
>> > This will disable all null checking on iterators in debug mode which is<br>
>> > relevant to additional functions beyond std::equal. In practice it should<br>
>> > not be a problem since if a null iterator is actually dereferenced (not only<br>
>> > compared) then the debugger stops with invalid access anyhow.<br>
>><br>
>> Well, this would be ideal :).<br>
><br>
><br>
</div></div></blockquote></div><br></div>