brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · cae2886 Raw
77 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++0310 11// <list>12 13// list(list&& c); // constexpr since C++2614 15#include <list>16#include <cassert>17#include "test_macros.h"18#include "MoveOnly.h"19#include "test_allocator.h"20#include "min_allocator.h"21 22TEST_CONSTEXPR_CXX26 bool test() {23  {24    std::list<MoveOnly, test_allocator<MoveOnly> > l(test_allocator<MoveOnly>(5));25    std::list<MoveOnly, test_allocator<MoveOnly> > lo(test_allocator<MoveOnly>(5));26    for (int i = 1; i <= 3; ++i) {27      l.push_back(i);28      lo.push_back(i);29    }30    std::list<MoveOnly, test_allocator<MoveOnly> >::iterator it = l.begin();31    std::list<MoveOnly, test_allocator<MoveOnly> > l2           = std::move(l);32    assert(l2 == lo);33    assert(l.empty());34    assert(l2.get_allocator() == lo.get_allocator());35    assert(it == l2.begin()); // Iterators remain valid36  }37  {38    std::list<MoveOnly, other_allocator<MoveOnly> > l(other_allocator<MoveOnly>(5));39    std::list<MoveOnly, other_allocator<MoveOnly> > lo(other_allocator<MoveOnly>(5));40    for (int i = 1; i <= 3; ++i) {41      l.push_back(i);42      lo.push_back(i);43    }44    std::list<MoveOnly, other_allocator<MoveOnly> >::iterator it = l.begin();45    std::list<MoveOnly, other_allocator<MoveOnly> > l2           = std::move(l);46    assert(l2 == lo);47    assert(l.empty());48    assert(l2.get_allocator() == lo.get_allocator());49    assert(it == l2.begin()); // Iterators remain valid50  }51  {52    std::list<MoveOnly, min_allocator<MoveOnly> > l(min_allocator<MoveOnly>{});53    std::list<MoveOnly, min_allocator<MoveOnly> > lo(min_allocator<MoveOnly>{});54    for (int i = 1; i <= 3; ++i) {55      l.push_back(i);56      lo.push_back(i);57    }58    std::list<MoveOnly, min_allocator<MoveOnly> >::iterator it = l.begin();59    std::list<MoveOnly, min_allocator<MoveOnly> > l2           = std::move(l);60    assert(l2 == lo);61    assert(l.empty());62    assert(l2.get_allocator() == lo.get_allocator());63    assert(it == l2.begin()); // Iterators remain valid64  }65 66  return true;67}68 69int main(int, char**) {70  assert(test());71#if TEST_STD_VER >= 2672  static_assert(test());73#endif74 75  return 0;76}77