Author: marshall Date: Tue Jan 2 20:37:30 2018 New Revision: 321689 URL: http://llvm.org/viewvc/llvm-project?rev=321689&view=rev Log: Mark LWG2824 as complete. We already did it, but I added a test to be sure
Modified: libcxx/trunk/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp libcxx/trunk/www/cxx1z_status.html Modified: libcxx/trunk/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp?rev=321689&r1=321688&r2=321689&view=diff ============================================================================== --- libcxx/trunk/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp (original) +++ libcxx/trunk/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp Tue Jan 2 20:37:30 2018 @@ -13,10 +13,29 @@ #include <list> #include <functional> +#include <algorithm> // for is_permutation #include <cassert> #include "min_allocator.h" + +#ifndef TEST_HAS_NO_EXCEPTIONS +template <typename T> +struct throwingLess { + throwingLess() : num_(1) {} + throwingLess(int num) : num_(num) {} + + bool operator() (const T& lhs, const T& rhs) const + { + if ( --num_ == 0) throw 1; + return lhs < rhs; + } + + mutable int num_; + }; +#endif + + int main() { { @@ -26,6 +45,28 @@ int main() c1.sort(std::greater<int>()); assert(c1 == std::list<int>(a2, a2+sizeof(a2)/sizeof(a2[0]))); } + +// Test with throwing comparison; make sure that nothing is lost. +// This is (sort of) LWG #2824 +#ifndef TEST_HAS_NO_EXCEPTIONS + { + int a1[] = {4, 8, 1, 0, 5, 7, 2, 3, 6, 11, 10, 9}; + const int sz = sizeof(a1)/sizeof(a1[0]); + for (int i = 0; i < 10; ++i) + { + std::list<int> c1(a1, a1 + sz); + try + { + throwingLess<int> comp(i); + c1.sort(std::cref(comp)); + } + catch (int) {} + assert((c1.size() == sz)); + assert((std::is_permutation(c1.begin(), c1.end(), a1))); + } + } +#endif + #if TEST_STD_VER >= 11 { int a1[] = {4, 8, 1, 0, 5, 7, 2, 3, 6, 11, 10, 9}; Modified: libcxx/trunk/www/cxx1z_status.html URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/cxx1z_status.html?rev=321689&r1=321688&r2=321689&view=diff ============================================================================== --- libcxx/trunk/www/cxx1z_status.html (original) +++ libcxx/trunk/www/cxx1z_status.html Tue Jan 2 20:37:30 2018 @@ -454,7 +454,7 @@ <tr><td><a href="https://wg21.link/LWG2788">2788</a></td><td>basic_string range mutators unintentionally require a default constructible allocator</td><td>Kona</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG2789">2789</a></td><td>Equivalence of contained objects</td><td>Kona</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG2790">2790</a></td><td>Missing specification of istreambuf_iterator::operator-></td><td>Kona</td><td>Complete</td></tr> - <tr><td><a href="https://wg21.link/LWG2794">2794</a></td><td>Missing requirements for allocator pointers</td><td>Kona</td><td></td></tr> + <tr><td><a href="https://wg21.link/LWG2794">2794</a></td><td>Missing requirements for allocator pointers</td><td>Kona</td><td><I>Nothing to do</I></td></tr> <tr><td><a href="https://wg21.link/LWG2795">2795</a></td><td>§[global.functions] provides incorrect example of ADL use</td><td>Kona</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG2796">2796</a></td><td>tuple should be a literal type</td><td>Kona</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG2801">2801</a></td><td>Default-constructibility of unique_ptr</td><td>Kona</td><td>Complete</td></tr> @@ -463,7 +463,7 @@ <tr><td><a href="https://wg21.link/LWG2806">2806</a></td><td>Base class of bad_optional_access</td><td>Kona</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG2807">2807</a></td><td>std::invoke should use std::is_nothrow_callable</td><td>Kona</td><td></td></tr> <tr><td><a href="https://wg21.link/LWG2812">2812</a></td><td>Range access is available with <string_view></td><td>Kona</td><td>Complete</td></tr> - <tr><td><a href="https://wg21.link/LWG2824">2824</a></td><td>list::sort should say that the order of elements is unspecified if an exception is thrown</td><td>Kona</td><td></td></tr> + <tr><td><a href="https://wg21.link/LWG2824">2824</a></td><td>list::sort should say that the order of elements is unspecified if an exception is thrown</td><td>Kona</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG2826">2826</a></td><td>string_view iterators use old wording</td><td>Kona</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG2834">2834</a></td><td>Resolution LWG 2223 is missing wording about end iterators</td><td>Kona</td><td>Complete</td></tr> <tr><td><a href="https://wg21.link/LWG2835">2835</a></td><td>LWG 2536 seems to misspecify <tgmath.h></td><td>Kona</td><td></td></tr> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits