From 6cffe0d14cbc0540e16939aaffbee3451fa0a131 Mon Sep 17 00:00:00 2001 From: Rian Quinn Date: Wed, 26 Oct 2016 15:11:24 -0600 Subject: [PATCH] Adds gsl::span::at() As per this discussion: https://github.com/Microsoft/GSL/issues/402 This patch adds support for at() to gsl::span --- gsl/span | 2 ++ tests/span_tests.cpp | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/gsl/span b/gsl/span index 6f74dc5..cf90e86 100644 --- a/gsl/span +++ b/gsl/span @@ -503,6 +503,8 @@ public: Expects(idx >= 0 && idx < storage_.size()); return data()[idx]; } + + constexpr reference at(index_type idx) const { return this->operator[](idx); } constexpr reference operator()(index_type idx) const { return this->operator[](idx); } constexpr pointer data() const noexcept { return storage_.data(); } diff --git a/tests/span_tests.cpp b/tests/span_tests.cpp index a1dd64d..35e6b03 100644 --- a/tests/span_tests.cpp +++ b/tests/span_tests.cpp @@ -769,6 +769,25 @@ SUITE(span_tests) } } + TEST(at_call) + { + int arr[4] = {1, 2, 3, 4}; + + { + span s = arr; + CHECK(s.at(0) == 1); + CHECK_THROW(s.at(5), fail_fast); + } + + { + int arr2d[2] = {1, 6}; + span s = arr2d; + CHECK(s.at(0) == 1); + CHECK(s.at(1) == 6); + CHECK_THROW(s.at(2) ,fail_fast); + } + } + TEST(operator_function_call) { int arr[4] = {1, 2, 3, 4};