Commit Graph

230 Commits

Author SHA1 Message Date
Marshall Clow 17c6aa0f53 Add a section about reporting bugs and contributing patches
llvm-svn: 205507
2014-04-03 03:13:12 +00:00
Marshall Clow 079402d1c1 Reword C++14 status to match C++11 status
llvm-svn: 205505
2014-04-03 02:38:12 +00:00
Marshall Clow ca6e366d07 Mark C++14 status as 'complete'
llvm-svn: 205504
2014-04-03 02:35:29 +00:00
Marshall Clow 1641a7c1cb Implement LWG issue #2135. If something goes wrong in condition_variable::wait, call terminate() rather than throwing an error. Do this indirectly, by marking the call as 'noexcept'. This is better than just calling terminate() directly, because it gives a better error message on the console.
llvm-svn: 204778
2014-03-26 02:45:04 +00:00
Marshall Clow b43399842f Mark LWG issues #2075 and #2142 as complete. 2142 was a change to the standard
to remove redundant wording, which required no changes to libc++. 2075 was a 
rewrite of the requirements for forward progress, and again, requires no changes
to the library.

llvm-svn: 204724
2014-03-25 14:57:05 +00:00
Marshall Clow 4fdb070817 Add a test to make sure we're doing the right thing for throwing exceptions from deferred functions. This is LWG issue #2186. No change to the library needed.
llvm-svn: 204678
2014-03-24 22:25:24 +00:00
Marshall Clow e2db85a968 Mark LWG Issue #2288 as complete. This was wording cleanup, no code changes required.
Also mark #2104 as complete. Leave the implementation in libc++ as noexcept, since 
implementations are allowed to add noexcept to non-virtual calls. If we throw from
unique_lock& operator=(unique_lock&& u), then that means the preconditions were violated,
and calling terminate() (as a result of throwing from a noexcept function) is as
good example of undefined behavior as any other.

llvm-svn: 204653
2014-03-24 18:38:01 +00:00
David Majnemer 7ec93f9b1c Implement N3891: A proposal to rename shared_mutex to shared_timed_mutex
This is as straightforward as it sounds, a renamed from shared_mutex to
shared_timed_mutex.

Note that libcxx .dylib and .so files built with c++14 support need to
be rebuilt.

llvm-svn: 204078
2014-03-17 20:19:44 +00:00
Marshall Clow 98de59157c Remove Issue #2235 from the Chicago section. The resolution was approved in Bristol (and it is listed there), and then is was approved *again* in Chicago. Thanks to STL @ microsoft for the catch
llvm-svn: 203995
2014-03-15 01:55:31 +00:00
Marshall Clow ef3d680093 Implement LWG 2360: 'reverse_iterator::operator*() is unimplementable'. Note that this is a (small) behavior change in the library. Reverse iterators whose base iterators' operator* return references to 'within themselves' have been sacrificed to the greater goal of avoiding data races.
llvm-svn: 203587
2014-03-11 17:16:17 +00:00
Marshall Clow ed94639ea1 Mark LWG #2314. 'apply() should return decltype(auto) and use decay_t before tuple_size' as complete. This is a correction to some example code in the standard, no change needed for libc++.
llvm-svn: 203579
2014-03-11 15:17:34 +00:00
Marshall Clow b33d838bcf Final bit for LWG #2263; test different allocator pointer types. Note that libc++ already does the right thing here; I've just added tests to ensure that it stays this way.
llvm-svn: 203539
2014-03-11 04:32:12 +00:00
Marshall Clow 17af2f56ab Add tests for LWG issue #2356. Stability of erasure in unordered associative containers. Libc++ already does this, but now we have tests for it.
llvm-svn: 203494
2014-03-10 21:36:36 +00:00
Marshall Clow 81fec9b270 Mark issues #2357 (wording changes in the standard, no functionality change) and #2132 (libc++ already does this) as complete.
llvm-svn: 203478
2014-03-10 17:59:59 +00:00
Marshall Clow 5f16f4c087 Update status for LWG 2193 and 2344.
llvm-svn: 203291
2014-03-07 21:47:20 +00:00
Marshall Clow 39bca1ea99 Implement LWG #2212: std::is_final. This requires compiler support, which modern versions of clang provide. Also mark LWG #2230 as complete - no code changes needed.
llvm-svn: 202934
2014-03-05 03:39:25 +00:00
Marshall Clow 4703f76376 Update synposis in <memory> to show move semantics for weak_ptr; add tests for already existing move semantics. Mark LWG issues #2315 (no changes needed), 2316 (move semantics for weak_ptr), 2252 (previous commit) and 2271 (previous commit) as complete.
llvm-svn: 202931
2014-03-05 03:12:04 +00:00
Marshall Clow 7493a29398 Fix issue number error; 2141 --> 2291 and mark it as complete
llvm-svn: 202884
2014-03-04 20:29:09 +00:00
Marshall Clow 5d658fbbdf Add a SG1 paper and some SG1 issues that affect the library to the task list.
llvm-svn: 202881
2014-03-04 19:40:36 +00:00
Marshall Clow 85a15f067e Apply David Majnemer's patch updating the links to the papers from Chicago and Issaquah.
llvm-svn: 202878
2014-03-04 19:22:53 +00:00
Marshall Clow 53ec054da4 Mark issues #2240 (wording only) and #2268 (revision 202876) as complete.
llvm-svn: 202877
2014-03-04 19:18:36 +00:00
Marshall Clow f519be343b Implement LWG 2324: Insert iterator constructors should use addressof(). Add two new container classes to the test suite that overload operator &, and add test cases to the insert/front_insert/back_insert iterator tests that use these containers.
llvm-svn: 202741
2014-03-03 19:20:40 +00:00
Marshall Clow 05c8dad230 Implement LWG Paper n3887: Consistent Metafunction Aliases. This adds std::tuple_element_t<> as an alias for tuple_element<>::type. Clean up the synopsis for tuple_element in <utility> as well.
llvm-svn: 202673
2014-03-03 06:18:11 +00:00
Marshall Clow 6a640a18a4 Implement LWG Issue #2285 - make_reverse_iterator. Also mark issues #1450 and #2205 as complete; they are just wording changes in the standard. Mark issues #2359, #2320 and #2322 as complete - libc++ implements them already.
llvm-svn: 202671
2014-03-03 01:24:04 +00:00
Marshall Clow 4ab4534964 More LWG issues. Mark #2182, #2323 and #2213 as complete. Add a test for #2339, and mark that as complete. No actual changes to the libc++ code; all of these were already in place.
llvm-svn: 202407
2014-02-27 16:13:36 +00:00
Marshall Clow c204c130fa LWG issue #2188: Reverse iterator does not fully support targets that overload operator&. Also mark #2272 and #2299 as complete; libc++ already implements them.
llvm-svn: 202339
2014-02-27 02:11:50 +00:00
Marshall Clow 16da324051 Implement LWG issue 2306: match_results::reference should be value_type&, not const value_type&. This is a general move by the LWG to have the reference type of read-only containers be a non-const reference; however, there are no methods that return a non-const reference to a match_result entry, so there's no worries about getting a non-const reference to a constant object.
llvm-svn: 202214
2014-02-26 01:56:31 +00:00
Marshall Clow 11918cff19 Mark LWG issue 2299 as complete. No code changes; libc++ already implements this.
llvm-svn: 202203
2014-02-25 23:11:19 +00:00
Marshall Clow 4da015b9b4 Mark LWG Issue 2257 as complete.
llvm-svn: 202162
2014-02-25 16:35:39 +00:00
Marshall Clow f433d63439 Mark LWG Issues 2278 and 2313 as complete. No code changes needed; libc++ already implemented both of these.
llvm-svn: 202161
2014-02-25 16:25:55 +00:00
Marshall Clow 0d1560e10e Implement LWG issue 2301: Mark std::tie as constexpr
llvm-svn: 202158
2014-02-25 16:11:46 +00:00
Marshall Clow 7d35711187 Implement LWG Issues #2329 and #2332 - disallow iterators into temporary regexes and regexes into temporary strings
llvm-svn: 201717
2014-02-19 21:21:11 +00:00
Marshall Clow 962003126f Mark issues 2280, 2258, 2304, 2317, 2350 and 2346 as completed.
llvm-svn: 201704
2014-02-19 17:55:46 +00:00
Marshall Clow b1ad26901f Mark issue 2293, 2241 and 2308 as complete
llvm-svn: 201460
2014-02-15 05:41:48 +00:00
Marshall Clow bacc03ef8d First pass at the Issaquah issues list
llvm-svn: 201459
2014-02-15 05:10:39 +00:00
Marshall Clow b1915875d0 Fix LWG Issue 2078. Make std::async(policy,...) try multiple policies until one succeeds.
llvm-svn: 193960
2013-11-03 15:43:35 +00:00
Marshall Clow 84413437ce Update status of issues
llvm-svn: 193228
2013-10-23 05:59:18 +00:00
Marshall Clow 96bb15f464 Updated status of issues and features
llvm-svn: 192546
2013-10-12 22:57:58 +00:00
Marshall Clow db78c7049e Fix LWG Issue 2141: common_type trait produces reference types
llvm-svn: 192142
2013-10-07 23:43:33 +00:00
Marshall Clow 5d5e7dbe94 Marked issue 2284 as complete
llvm-svn: 192085
2013-10-07 03:26:42 +00:00
Peter Collingbourne 26dd09e57f Make it possible to link against libstdc++ as well as libsupc++ with CMake.
Linking against libstdc++, rather than libsupc++, is probably better
for people who need to link against clients of libstdc++.  Because
libsupc++ is provided only as a static library, its globals are not
shared between the static library and the copy linked into libstdc++.
This has been found to cause at least one test failure.

This also removes a number of symbols which were multiply defined
between libstdc++ and libc++, only when linking with libstdc++.

Differential Revision: http://llvm-reviews.chandlerc.com/D1825

llvm-svn: 192075
2013-10-06 22:13:19 +00:00
Marshall Clow 82f4901d5f LWG Issue 2247
llvm-svn: 192058
2013-10-06 07:19:23 +00:00
Marshall Clow 4fc5ae4c1c Updated status post-Chicago
llvm-svn: 192057
2013-10-06 07:10:55 +00:00
Marshall Clow ba132bb198 Fixed bad link for n3789; thanks to Chip Davis for the catch
llvm-svn: 191598
2013-09-28 01:52:18 +00:00
Marshall Clow 2cf77525be Missed a change that didn't have an issue number 'GB 9'
llvm-svn: 191575
2013-09-27 22:21:17 +00:00
Marshall Clow ff1b7ef31b Updated table with results from Chicago
llvm-svn: 191573
2013-09-27 22:16:32 +00:00
Howard Hinnant ff29d538ea Apply LWG 2048. It is amazing to me that this actually works, but the existing tests confirm that it does. c++1y status page now showing libc++ is complete for c++1y modulo dynarray issues.
llvm-svn: 191142
2013-09-21 19:25:37 +00:00
Howard Hinnant f13cf89df2 Apply LWG 2021. This is only a documentation change. Also bringing c++1y status page up to date.
llvm-svn: 191141
2013-09-21 18:17:23 +00:00
Marshall Clow 9a08837ba3 Fix link to dynarray issue
llvm-svn: 190707
2013-09-13 17:32:32 +00:00
Marshall Clow 63d233b6ce Update status for <dynarray>
llvm-svn: 190700
2013-09-13 15:37:11 +00:00
Marshall Clow ef44edfde4 N3545: Quoted strings
llvm-svn: 190032
2013-09-05 04:48:45 +00:00
Marshall Clow edc4ee3d15 Mark issues 2103, 2005, 2196 and 2203 as complete. No code changes.
llvm-svn: 190012
2013-09-04 23:48:25 +00:00
Marshall Clow 8bd0ac1135 Updated status for LSG issues 2122, 2169, 2177, 2140 and 2086.
llvm-svn: 189900
2013-09-04 01:06:59 +00:00
Marshall Clow 3e2319e47a Update status of issues 2045, 2050, 2080, 2081, 2083, 2130, 2137 and 2177.
llvm-svn: 189894
2013-09-04 00:18:19 +00:00
Marshall Clow 5155a569d1 LWG Issue 2148: Hashing Enums
llvm-svn: 189831
2013-09-03 17:55:32 +00:00
Marshall Clow 3e6a3d0c29 Fix a typo in the status for <optional>
llvm-svn: 189809
2013-09-03 14:16:49 +00:00
Howard Hinnant e7d746d8b9 Implement N3672, optional<T>.
llvm-svn: 189772
2013-09-02 20:30:37 +00:00
Howard Hinnant 69bc206547 SFINAE out duration converting constructor if the constructor would otherwise cause a ratio compile-time overflow. This fixes LWG 2094.
llvm-svn: 189722
2013-08-31 16:51:56 +00:00
Howard Hinnant 525dc284b4 is_destructible for function types was mistakenly returning true instead of false. This is true in both C++11 and C++1y, but has been clarified by the post C++11 LWG issue 2049.
llvm-svn: 189687
2013-08-30 19:12:42 +00:00
Marshall Clow 1e548c72e7 LWG Issue 2128: Implement global cbegin/rbegin/cend/rbegin
llvm-svn: 189634
2013-08-30 01:17:07 +00:00
Marshall Clow eabb87c438 Typo: I wrote "2058" into the status column for issue 2058 instead of "Complete"
llvm-svn: 189602
2013-08-29 19:03:01 +00:00
Marshall Clow 08bdca2fc2 Mark LWG issues 2109, 222, 2058, 2091 and 2092 as complete. No changes to libc++ code.
llvm-svn: 189601
2013-08-29 18:55:55 +00:00
Marshall Clow 24cca08054 Mark issues 2147, 2149, 2163, 2172, 2098 and 2177 as complete. No code changes to libc++
llvm-svn: 189586
2013-08-29 15:35:54 +00:00
Marshall Clow 90a4dad9da Marked #2163 as complete in previous commit instead of #2162. Corrected.
llvm-svn: 189401
2013-08-27 20:25:06 +00:00
Marshall Clow 06fbed03fc LWG Issue 2162: mark allocator_traits::maxsize as noexcept
llvm-svn: 189399
2013-08-27 20:22:15 +00:00
Marshall Clow 7988106b21 LWG issues 2174/5/6 - mark wstring_convert::converted as noexcept, and make (some of) the constructors for wstring_convert and wbuffer_convert as explicit. Add configuration macro _LIBCPP_EXPLICIT_AFTER_CXX11
llvm-svn: 189398
2013-08-27 20:18:59 +00:00
Marshall Clow bf9ad4a1f8 Mark LWG issues 2190, 2200, and 2211 as done. No changes needed to libc++.
llvm-svn: 189359
2013-08-27 15:47:05 +00:00
Marshall Clow 5320c2b563 Update synopsis in <locale> to match LWG Issue 2229. No code change
llvm-svn: 189352
2013-08-27 14:22:13 +00:00
Marshall Clow 54c83368a5 Implement LWG issue 2061
llvm-svn: 189345
2013-08-27 13:03:03 +00:00
Marshall Clow 541be9c72c Mark LWG issues 2011, 2015, 2033, 2065, 2071, 2102, 2235 as complete b/c libc++ already fixed them.
llvm-svn: 189232
2013-08-26 17:31:31 +00:00
Howard Hinnant 145afa17ca Rename _LIBCPP_DEBUG2 to _LIBCPP_DEBUG.
llvm-svn: 189140
2013-08-23 20:10:18 +00:00
Marshall Clow 7b5566c5f5 Mark LWG issues #2083, 2099 and 2105 as complete. No functionality change.
llvm-svn: 189044
2013-08-22 18:53:17 +00:00
Marshall Clow a86d516213 LWG 2145 - mark constructor for std::error_category as inline and constexpr. Leave the (existing, out-of-line, non-constexpr) in the dylib for compatibility with existing programs)
llvm-svn: 188858
2013-08-21 02:57:19 +00:00
Marshall Clow 890d1ee469 Updated status of issues #2093, 2144, and 2185
llvm-svn: 188813
2013-08-20 16:59:06 +00:00
Marshall Clow 8a79e1d053 Updated status and description of issues 2064, 2069 and 2096.
llvm-svn: 188811
2013-08-20 16:24:55 +00:00
Marshall Clow a0393ce271 Updated status of issues #2028, 2047, and 2053.
llvm-svn: 188810
2013-08-20 16:18:29 +00:00
Marshall Clow e06e3ac7d5 Updated status of issues #1214, 2207 and 2209. They were already implemented, so no functionality change was needed.
llvm-svn: 188803
2013-08-20 14:21:16 +00:00
Howard Hinnant 009aff5e96 Added some missing issues to the c++1y status page, and put in hyperlinks for the papers.
llvm-svn: 188387
2013-08-14 17:26:18 +00:00
Marshall Clow a6821921a7 remove CWG papers from list; add link to clang status page
llvm-svn: 188383
2013-08-14 16:30:37 +00:00
Marshall Clow 03bcdf27c6 Added CWG and SG1 papers to libc++ status page
llvm-svn: 188381
2013-08-14 16:12:34 +00:00
Marshall Clow 444d3300f2 Mark LWG Issue #2110 and #2113 as completed - they were already done
llvm-svn: 188378
2013-08-14 15:28:40 +00:00
Marshall Clow ede1aa2d31 Add a deleted assignment operator for basic_ostream; LWG Issue #2067
llvm-svn: 188375
2013-08-14 15:15:28 +00:00
Marshall Clow 2d6e2834a8 Implement LWG Issue #2187 (emplace_back and emplace for vector<bool>)
llvm-svn: 188333
2013-08-13 23:54:12 +00:00
Marshall Clow e06dfe2ccd Update for N3657 and issue 2010
llvm-svn: 188321
2013-08-13 22:20:01 +00:00
Marshall Clow 72f7821cc6 Updated issues 2039, 2044, 2197, 2225, and 2231
llvm-svn: 188294
2013-08-13 17:02:42 +00:00
Marshall Clow bd9d059e6c Updated Issue 2187
llvm-svn: 188286
2013-08-13 16:23:22 +00:00
Marshall Clow e714b879df Removed 'Ready' issues from Bristol
llvm-svn: 188284
2013-08-13 16:07:51 +00:00
Marshall Clow fb9945594f Updated issues 2009 and 2074
llvm-svn: 188283
2013-08-13 16:01:28 +00:00
Marshall Clow 47e432c6df Fix template formatting. No, really
llvm-svn: 188277
2013-08-13 15:13:42 +00:00
Marshall Clow 6efb2bf585 escape some template specs
llvm-svn: 188276
2013-08-13 15:07:02 +00:00
Marshall Clow 873e890f44 Fix case mismatch
llvm-svn: 188275
2013-08-13 14:59:44 +00:00
Marshall Clow f77718ad1d Create a C++14 status page
llvm-svn: 188273
2013-08-13 14:58:39 +00:00
Howard Hinnant 2f51de568f debug mode for unordered_map. Also picked up a missing check and test in unordered_multimap. This wraps up debug mode for the unordered containers.
llvm-svn: 187659
2013-08-02 17:50:49 +00:00
Howard Hinnant 42a3046eef Ok, 3 major changes for debug mode in one commit:
1.  I had been detecting and trapping iterator == and \!= among iterators
    in different containers as an error.  But the trapping itself is actually
    an error.
    
    Consider:
    
    #include <iostream>
    #include <vector>
    #include <algorithm>

    template <class C>
    void
    display(const C& c)
    {
        std::cout << "{";
        bool first = true;
        for (const auto& x : c)
        {
            if (\!first)
                std::cout << ", ";
            first = false;
            std::cout << x;
        }
        std::cout << "}\n";
    }

    int
    main()
    {
        typedef std::vector<int> V;
        V v1 = {1, 3, 5};
        V v2 = {2, 4, 6};
        display(v1);
        display(v2);
        V::iterator i = std::find(v1.begin(), v1.end(), 1);
        V::iterator j = std::find(v2.begin(), v2.end(), 2);
        if (*i == *j)
            i = j;    // perfectly legal
        // ...
        if (i \!= j)   // the only way to check
            v2.push_back(*i);
        display(v1);
        display(v2);
    }

    It is legal to assign an iterator from one container to another of the
    same type.  This is required to work.  One might want to test whether or
    not such an assignment had been made.  The way one performs such a check
    is using the iterator's ==, \!= operator.  This is a logical and necessary
    function and does not constitute an error.

2.  I had a header circular dependence bug when _LIBCPP_DEBUG2 is defined.
    This caused a problem in several of the libc++ tests.
    Fixed.

3.  There is a serious problem when _LIBCPP_DEBUG2=1 at the moment in that
    std::basic_string is inoperable.  std::basic_string uses __wrap_iterator
    to implement its iterators.  __wrap_iterator has been rigged up in debug
    mode to support vector.  But string hasn't been rigged up yet.  This means
    that one gets false positives when using std::string in debug mode.  I've
    upped std::string's priority in www/debug_mode.html.

llvm-svn: 187636
2013-08-02 00:26:35 +00:00
Howard Hinnant e5c13decbe Debug mode for unordered_multiset. The exercise spotted a few places I had missed on unordered_set, so I picked those up as well.
There are actually two debug modes:

   1.  -D_LIBCPP_DEBUG2 or -D_LIBCPP_DEBUG2=1
       This is a relatively expensive debug mode, but very thorough.  This is normally what you want to debug with, but may turn O(1) operations into O(N) operations.

   2.  -D_LIBCPP_DEBUG2=0
       This is "debug lite."  Only preconditions that can be checked with O(1) expense are checked.  For example range checking on an indexing operation.  But not iterator validity.

llvm-svn: 187369
2013-07-29 19:05:47 +00:00
Howard Hinnant 9a20da75ef I believe this finishes up debug mode for list. The testing is a little weak, but I believe all of the functionality is there. Certainly enough for people to checkout and start beating up on.
llvm-svn: 179632
2013-04-16 21:42:36 +00:00
Howard Hinnant 97b8ebe600 I believe debug mode for vector<T> (T != bool) is complete. If anyone sees anything more they would like to see on it, please let me know. Debug mode is activated by compiling with -D_LIBCPP_DEBUG2=1. Eventually _LIBCPP_DEBUG2 will be renamed to just _LIBCPP_DEBUG.
llvm-svn: 178288
2013-03-28 20:35:29 +00:00
Marshall Clow 928f65a8aa Updated link to Marshall's instructions
llvm-svn: 177099
2013-03-14 19:00:34 +00:00
Howard Hinnant d70e6570fd Some forward-looking and optimistic documentation.
llvm-svn: 177093
2013-03-14 18:37:48 +00:00
Howard Hinnant 5b22e99e77 Michael van der Westhuizen: correction to the libcxx build instructions when built with libcxxrt on Linux.
llvm-svn: 176093
2013-02-26 16:27:55 +00:00