[patch] Make vector::at() assertion message more useful

Gabriel Dos Reis gdr@integrable-solutions.net
Sat Aug 17 15:10:00 GMT 2013


On Sat, Aug 17, 2013 at 5:41 AM, Paolo Carlini <paolo.carlini@oracle.com> wrote:
>
>
> Hi,
>
> Paul Pluzhnikov <ppluzhnikov@google.com> ha scritto: __throw_out_of_range(__N("vector::_M_range_check"));
>>+        {
>>+          char __s[256];
>>+          __builtin_snprintf(__s, sizeof(__s),
>>+                             __N("vector::_M_range_check: %zu >= %zu"),
>>+                             __n, this->size());
>>+          __throw_out_of_range(__s);
>>+        }
>
> The idea makes sense, but while we are at it I think the message could be more clear, say what the two numbers are. Also, I don't think we can unconditionally call snprintf, it's C99 and supported targets lack it. Maybe with some libiberty magic? I don't think such magic automagically triggers when __builtin_snprintf is expanded, or does it? Please investigate that.

I agree that we can't embark a significant IO library as part of a purely
data structure components.

Furthermore, __builtin_snprintf doesn't always expand to a
compiler magic -- it can be a normal function call.

This would be a regression, not an improvement.

-- Gaby



More information about the Libstdc++ mailing list