1// { dg-options "-std=gnu++11" }
2
3// Copyright (C) 2011-2015 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library.  This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 3, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING3.  If not see
18// <http://www.gnu.org/licenses/>.
19
20#undef _GLIBCXX_CONCEPT_CHECKS
21
22// XXX FIXME:  parallel-mode should deal correctly with moveable-only types
23// per C++0x, at minimum smoothly fall back to serial.
24#undef _GLIBCXX_PARALLEL
25
26#include <algorithm>
27#include <testsuite_hooks.h>
28#include <testsuite_iterators.h>
29#include <testsuite_rvalref.h>
30
31using __gnu_test::test_container;
32using __gnu_test::random_access_iterator_wrapper;
33using __gnu_test::rvalstruct;
34
35typedef test_container<rvalstruct, random_access_iterator_wrapper> Container;
36
37const int A[] = { 10 };
38const int N = 1;
39
40bool order(const rvalstruct& lhs, const rvalstruct& rhs)
41{ return lhs < rhs; }
42
43// libstdc++/49559
44void test01()
45{
46  bool test __attribute__((unused)) = true;
47
48  rvalstruct s1[1];
49  std::copy(A, A + 1, s1);
50  Container con1(s1, s1 + 1);
51  std::stable_sort(con1.begin(), con1.end());
52  VERIFY( s1[0] == 10 );
53  VERIFY( s1[0].valid );
54
55  rvalstruct s2[1];
56  std::copy(A, A + 1, s2);
57  Container con2(s2, s2 + 1);
58  std::stable_sort(con2.begin(), con2.end(), order);
59  VERIFY( s2[0] == 10 );
60  VERIFY( s2[0].valid );
61}
62
63int
64main()
65{
66  test01();
67  return 0;
68}
69