From 9ea0e473f0b96455b918eefcf8fc535638674a1f Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Tue, 19 Mar 2019 03:30:07 +0000 Subject: Mark 'front()' and 'back()' as noexcept for array/deque/string/string_view. These are just rebranded 'operator[]', and should be noexcept like it is. llvm-svn: 356435 --- .../containers/sequences/array/front_back.pass.cpp | 24 ++++++++++------ .../sequences/deque/deque.capacity/access.pass.cpp | 32 ++++++++++++++++------ 2 files changed, 40 insertions(+), 16 deletions(-) (limited to 'libcxx/test/std/containers') diff --git a/libcxx/test/std/containers/sequences/array/front_back.pass.cpp b/libcxx/test/std/containers/sequences/array/front_back.pass.cpp index 1a714369ffc..5e0cb08ede0 100644 --- a/libcxx/test/std/containers/sequences/array/front_back.pass.cpp +++ b/libcxx/test/std/containers/sequences/array/front_back.pass.cpp @@ -68,10 +68,14 @@ int main(int, char**) typedef std::array C; C c = {}; C const& cc = c; - static_assert((std::is_same::value), ""); - static_assert((std::is_same::value), ""); - static_assert((std::is_same::value), ""); - static_assert((std::is_same::value), ""); + ASSERT_SAME_TYPE(decltype( c.back()), typename C::reference); + ASSERT_SAME_TYPE(decltype(cc.back()), typename C::const_reference); + LIBCPP_ASSERT_NOEXCEPT( c.back()); + LIBCPP_ASSERT_NOEXCEPT( cc.back()); + ASSERT_SAME_TYPE(decltype( c.front()), typename C::reference); + ASSERT_SAME_TYPE(decltype(cc.front()), typename C::const_reference); + LIBCPP_ASSERT_NOEXCEPT( c.front()); + LIBCPP_ASSERT_NOEXCEPT( cc.front()); if (c.size() > (0)) { // always false TEST_IGNORE_NODISCARD c.front(); TEST_IGNORE_NODISCARD c.back(); @@ -84,10 +88,14 @@ int main(int, char**) typedef std::array C; C c = {{}}; C const& cc = c; - static_assert((std::is_same::value), ""); - static_assert((std::is_same::value), ""); - static_assert((std::is_same::value), ""); - static_assert((std::is_same::value), ""); + ASSERT_SAME_TYPE(decltype( c.back()), typename C::reference); + ASSERT_SAME_TYPE(decltype(cc.back()), typename C::const_reference); + LIBCPP_ASSERT_NOEXCEPT( c.back()); + LIBCPP_ASSERT_NOEXCEPT( cc.back()); + ASSERT_SAME_TYPE(decltype( c.front()), typename C::reference); + ASSERT_SAME_TYPE(decltype(cc.front()), typename C::const_reference); + LIBCPP_ASSERT_NOEXCEPT( c.front()); + LIBCPP_ASSERT_NOEXCEPT( cc.front()); if (c.size() > (0)) { TEST_IGNORE_NODISCARD c.front(); TEST_IGNORE_NODISCARD c.back(); diff --git a/libcxx/test/std/containers/sequences/deque/deque.capacity/access.pass.cpp b/libcxx/test/std/containers/sequences/deque/deque.capacity/access.pass.cpp index c7d9006d2c1..583dba28a24 100644 --- a/libcxx/test/std/containers/sequences/deque/deque.capacity/access.pass.cpp +++ b/libcxx/test/std/containers/sequences/deque/deque.capacity/access.pass.cpp @@ -54,8 +54,12 @@ int main(int, char**) { typedef std::deque C; C c = make >(10); - LIBCPP_ASSERT_NOEXCEPT(c[0]); - ASSERT_SAME_TYPE(C::reference, decltype(c[0])); + ASSERT_SAME_TYPE(decltype(c[0]), C::reference); + LIBCPP_ASSERT_NOEXCEPT( c[0]); + LIBCPP_ASSERT_NOEXCEPT( c.front()); + ASSERT_SAME_TYPE(decltype(c.front()), C::reference); + LIBCPP_ASSERT_NOEXCEPT( c.back()); + ASSERT_SAME_TYPE(decltype(c.back()), C::reference); for (int i = 0; i < 10; ++i) assert(c[i] == i); for (int i = 0; i < 10; ++i) @@ -66,8 +70,12 @@ int main(int, char**) { typedef std::deque C; const C c = make >(10); - LIBCPP_ASSERT_NOEXCEPT(c[0]); - ASSERT_SAME_TYPE(C::const_reference, decltype(c[0])); + ASSERT_SAME_TYPE(decltype(c[0]), C::const_reference); + LIBCPP_ASSERT_NOEXCEPT( c[0]); + LIBCPP_ASSERT_NOEXCEPT( c.front()); + ASSERT_SAME_TYPE(decltype(c.front()), C::const_reference); + LIBCPP_ASSERT_NOEXCEPT( c.back()); + ASSERT_SAME_TYPE(decltype(c.back()), C::const_reference); for (int i = 0; i < 10; ++i) assert(c[i] == i); for (int i = 0; i < 10; ++i) @@ -79,8 +87,12 @@ int main(int, char**) { typedef std::deque> C; C c = make> >(10); - LIBCPP_ASSERT_NOEXCEPT(c[0]); - ASSERT_SAME_TYPE(C::reference, decltype(c[0])); + ASSERT_SAME_TYPE(decltype(c[0]), C::reference); + LIBCPP_ASSERT_NOEXCEPT( c[0]); + LIBCPP_ASSERT_NOEXCEPT( c.front()); + ASSERT_SAME_TYPE(decltype(c.front()), C::reference); + LIBCPP_ASSERT_NOEXCEPT( c.back()); + ASSERT_SAME_TYPE(decltype(c.back()), C::reference); for (int i = 0; i < 10; ++i) assert(c[i] == i); for (int i = 0; i < 10; ++i) @@ -91,8 +103,12 @@ int main(int, char**) { typedef std::deque> C; const C c = make> >(10); - LIBCPP_ASSERT_NOEXCEPT(c[0]); - ASSERT_SAME_TYPE(C::const_reference, decltype(c[0])); + ASSERT_SAME_TYPE(decltype(c[0]), C::const_reference); + LIBCPP_ASSERT_NOEXCEPT( c[0]); + LIBCPP_ASSERT_NOEXCEPT( c.front()); + ASSERT_SAME_TYPE(decltype(c.front()), C::const_reference); + LIBCPP_ASSERT_NOEXCEPT( c.back()); + ASSERT_SAME_TYPE(decltype(c.back()), C::const_reference); for (int i = 0; i < 10; ++i) assert(c[i] == i); for (int i = 0; i < 10; ++i) -- cgit v1.2.3