Commit 97face15 authored by Alex Ames's avatar Alex Ames Committed by Wouter van Oortmerssen

Changed how vector_data works. (#4467)

In some debug environments using vector[i] does bounds checking even
though the standard specifies that it should not. Using
*(vector.begin()) sidesteps this though, giving the same result without
the bounds checking.
parent f2627e16
...@@ -41,12 +41,14 @@ inline char string_back(const std::string &value) { ...@@ -41,12 +41,14 @@ inline char string_back(const std::string &value) {
// Helper method that retrieves ::data() from a vector in a way that is // Helper method that retrieves ::data() from a vector in a way that is
// compatible with pre C++11 STLs (e.g stlport). // compatible with pre C++11 STLs (e.g stlport).
template <typename T> inline T *vector_data(std::vector<T> &vector) { template <typename T> inline T *vector_data(std::vector<T> &vector) {
return &(vector[0]); // In some debug environments, operator[] does bounds checking, so &vector[0]
// can't be used.
return &(*vector.begin());
} }
template <typename T> inline const T *vector_data( template <typename T> inline const T *vector_data(
const std::vector<T> &vector) { const std::vector<T> &vector) {
return &(vector[0]); return &(*vector.begin());
} }
template <typename T, typename V> template <typename T, typename V>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment