Implement the last bit of P0031: 'A Proposal to Add Constexpr Modifiers to reverse_iterator, move_iterator, array and Range Access' for C++17

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290976 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Marshall Clow
2017-01-04 17:58:17 +00:00
parent 1fbd97cfd5
commit e22af6b758
6 changed files with 157 additions and 54 deletions

View File

@@ -17,6 +17,10 @@
#include "test_macros.h"
// std::array is explicitly allowed to be initialized with A a = { init-list };.
// Disable the missing braces warning for this reason.
#include "disable_missing_braces_warning.h"
int main()
{
{
@@ -109,4 +113,33 @@ int main()
}
}
#endif
#if TEST_STD_VER > 14
{
typedef std::array<int, 5> C;
constexpr C c{0,1,2,3,4};
static_assert ( c.begin() == std::begin(c), "");
static_assert ( c.cbegin() == std::cbegin(c), "");
static_assert ( c.end() == std::end(c), "");
static_assert ( c.cend() == std::cend(c), "");
static_assert ( c.rbegin() == std::rbegin(c), "");
static_assert ( c.crbegin() == std::crbegin(c), "");
static_assert ( c.rend() == std::rend(c), "");
static_assert ( c.crend() == std::crend(c), "");
static_assert ( std::begin(c) != std::end(c), "");
static_assert ( std::rbegin(c) != std::rend(c), "");
static_assert ( std::cbegin(c) != std::cend(c), "");
static_assert ( std::crbegin(c) != std::crend(c), "");
static_assert ( *c.begin() == 0, "");
static_assert ( *c.rbegin() == 4, "");
static_assert ( *std::begin(c) == 0, "" );
static_assert ( *std::cbegin(c) == 0, "" );
static_assert ( *std::rbegin(c) == 4, "" );
static_assert ( *std::crbegin(c) == 4, "" );
}
#endif
}