diff options
Diffstat (limited to 'test/std/iterators/iterator.primitives/iterator.operations/advance.pass.cpp')
| -rw-r--r-- | test/std/iterators/iterator.primitives/iterator.operations/advance.pass.cpp | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/test/std/iterators/iterator.primitives/iterator.operations/advance.pass.cpp b/test/std/iterators/iterator.primitives/iterator.operations/advance.pass.cpp index e395da299dc7b..e5bd5603b8e38 100644 --- a/test/std/iterators/iterator.primitives/iterator.operations/advance.pass.cpp +++ b/test/std/iterators/iterator.primitives/iterator.operations/advance.pass.cpp @@ -9,14 +9,16 @@ // <iterator> +// All of these became constexpr in C++17 +// // template <InputIterator Iter> -// void advance(Iter& i, Iter::difference_type n); +// constexpr void advance(Iter& i, Iter::difference_type n); // // template <BidirectionalIterator Iter> -// void advance(Iter& i, Iter::difference_type n); +// constexpr void advance(Iter& i, Iter::difference_type n); // // template <RandomAccessIterator Iter> -// void advance(Iter& i, Iter::difference_type n); +// constexpr void advance(Iter& i, Iter::difference_type n); #include <iterator> #include <cassert> @@ -31,8 +33,19 @@ test(It i, typename std::iterator_traits<It>::difference_type n, It x) assert(i == x); } +#if TEST_STD_VER > 14 +template <class It> +constexpr bool +constepxr_test(It i, typename std::iterator_traits<It>::difference_type n, It x) +{ + std::advance(i, n); + return i == x; +} +#endif + int main() { + { const char* s = "1234567890"; test(input_iterator<const char*>(s), 10, input_iterator<const char*>(s+10)); test(forward_iterator<const char*>(s), 10, forward_iterator<const char*>(s+10)); @@ -42,4 +55,18 @@ int main() test(random_access_iterator<const char*>(s+5), -5, random_access_iterator<const char*>(s)); test(s+5, 5, s+10); test(s+5, -5, s); + } +#if TEST_STD_VER > 14 + { + constexpr const char* s = "1234567890"; + static_assert( constepxr_test(input_iterator<const char*>(s), 10, input_iterator<const char*>(s+10)), "" ); + static_assert( constepxr_test(forward_iterator<const char*>(s), 10, forward_iterator<const char*>(s+10)), "" ); + static_assert( constepxr_test(bidirectional_iterator<const char*>(s+5), 5, bidirectional_iterator<const char*>(s+10)), "" ); + static_assert( constepxr_test(bidirectional_iterator<const char*>(s+5), -5, bidirectional_iterator<const char*>(s)), "" ); + static_assert( constepxr_test(random_access_iterator<const char*>(s+5), 5, random_access_iterator<const char*>(s+10)), "" ); + static_assert( constepxr_test(random_access_iterator<const char*>(s+5), -5, random_access_iterator<const char*>(s)), "" ); + static_assert( constepxr_test(s+5, 5, s+10), "" ); + static_assert( constepxr_test(s+5, -5, s), "" ); + } +#endif } |
