The TR1 array container template provides functionality for implementing a fixed size array. This is a halfway point between plain old C style arrays and C++ STL vectors. The defining property of the array container is that its size is fixed. Consider and example of an array of 4 integers:
array = { 0, 1, 2, 3 };
Since it adheres to the STL container rules, it must implement methods such as size(), and max_size(). For the array container, both of these should return the size of the array, which is fixed. In the above example, both should return 4. However, when using the VS 2008 TR1 implementation of array, a bug appears. The code:Produces the output:#include <iostream>
#include <array>
using namespace std;
using namespace std::tr1;
int main()
{
array<int, 4> arr = {1, 2, 3, 4};
cout << "size: " << arr.size() << endl;
cout << "max_size: " << arr.max_size()
<< endl;
return 0;
}
instead of:size: 4
max_size: 1073741823
If we take a look at the implementation of max_size() we can see the problemsize: 4
max_size: 4
Instead of simply retuning N (the size of the array), it performs the same computation as if this was a vector.size_type max_size() const
{ // return maximum possible length of sequence
size_type _Count = (size_type)(-1) / sizeof(_Ty);
return (0 < _Count ? _Count : 1);
}
This issue has been logged as a bug with Microsoft and will hopefully be fixed before the "Gold" release of the feature pack.
No comments:
Post a Comment