diff --git a/array-bounds.cpp b/array-bounds.cpp index 111a090..01b9dda 100644 --- a/array-bounds.cpp +++ b/array-bounds.cpp @@ -6,8 +6,7 @@ void classic() { int array[2]; array[0] = 1; array[1] = 2; - // array[3] = 3; <- clang++ -Warray-bounds warns about this - // array[4] = 4; <- clang++ -Warray-bounds warns about this + array[3] = 3; // <- clang++ -Warray-bounds warns about this int n = 10; std::cout << array[3] << std::endl; // no warning! @@ -15,42 +14,53 @@ void classic() { std::cout << array[n-1] << std::endl; // no warning! } -// FIXME void std_array() { std::array array; array[0] = 1; - array[1] = 2; - array[3] = 3; // XXX <- clang++ -Warray-bounds warns about this - // array[4] = 4; <- clang++ -Warray-bounds warns about this + array.at(1) = 2; - int n = 10; - std::cout << array[3] << std::endl; // no warning! - std::cout << array[4] << std::endl; // no warning! - std::cout << array[n-1] << std::endl; // no warning! + // whoopsie + array[2] = 3; + + for(auto &e: array) { + std::cout << e << " "; + } + std::cout << std::endl; + + try { + std::cout << array.at(2) << std::endl; + } catch (std::out_of_range e) { + std::cout << "cool, got std::out_of_range." << std::endl; + } } -// FIXME void std_vector() { - std::vector vector; + std::vector vector(1); vector[0] = 1; - vector[1] = 2; + try { + vector.at(2) = 999; + } catch (std::out_of_range e) { + std::cout << "cool, got std::out_of_range." << std::endl; + } + vector.resize(10); + vector.at(2) = 3; + vector[1] = 2; // should now work // vector[3] = 3; // SEGFAULT - // vector[4] = 4; <- clang++ -Warray-bounds warns about this - int n = 10; - // std::cout << vector[3] << std::endl; // no warning! - // std::cout << vector[4] << std::endl; // no warning! - // std::cout << vector[n-1] << std::endl; // no warning! + for(auto &e: vector) { + std::cout << e << " "; + } + std::cout << std::endl; } int main() { - std::cout << "classic()" << std::endl; + std::cout << "== classic()" << std::endl; classic(); - std::cout << "std_array()" << std::endl; + std::cout << "== std_array()" << std::endl; std_array(); - std::cout << "std_vector()" << std::endl; + std::cout << "== std_vector()" << std::endl; std_vector(); return 0;