Farid Zaripov wrote:
-----Original Message-----
From: Martin Sebor [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 18, 2007 9:53 PM
To: stdcxx-dev@incubator.apache.org
Subject: Re: svn commit: r577002 - /incubator/stdcxx/trunk/tests/utilities/20.temp.buffer.cpp

        * 20.temp.buffer.cpp (run_test): Use _RWSTD_LONG_MAX instead
        of _RWSTD_PTRDIFF_MAX because BigStruct parametrized by
        unsigned long type and sizeof (_RWSTD_PTRDIFF_T) can be
        greater that sizeof (unsigned long).
Shouldn't that be the other way around? I mean, wouldn't a more robust solution be to parametrize BigStruct on ptrdiff_t so that it can be instantiated with the largest possible value even on
LLP64 like Windows?

  Are there any LLP64 platforms except Windows?

I don't know of any other platforms with this silly model, but
that doesn't mean there isn't one.


  Because on Windows the maximum size of the array is 0x7fffffff bytes.

AFAICT, they're within their right to impose a limit. The C++
standard says the maximum size of an object that a conforming
implementation is required to support is 262,144.

We need to avoid exceeding the limit (which doesn't necessarily
mean that we need to use unsigned long, just that we shouldn't
be trying to create bigger objects than what the implementation
allows). It's your call but if I were to decide, I would change
BigStruct to take ptrdiff_t, or better yet, size_t as a parameter,
and instantiate it on a INT_MAX just for Windows, and leave it
the way it was everywhere else.

Martin


The following line of code:

char buf [0x80000000];

inducts the error on MSVC (32 bit and 64 bit):

error C2148: total size of array must not exceed 0x7fffffff bytes

on ICC 9.1 (32 bit and 64 bit), 10.0 (32 bit and 64 bit):

error: array is too large
  char buf [0x80000000];
       ^

Farid.

Reply via email to