Commit Graph

449 Commits

Author SHA1 Message Date
Howard Hinnant ec0810e1c8 I had a giant misunderstanding of what 'synchronizes with' meant in [futures.async]/p5. This invalidated the current design of async in <future>. This is a new design, based on my new understanding, which has been confirmed on the lwg mailing list. The summary is that ~future() (and ~shared_future()) will block when they are created from within async, and the thread hasn't finished yet. As part of this work I created two new type traits: __invokable<F, Args...>::value and __invoke_of<F, Args...>::type. These are what result_of<F(Args...)> wanted to be when it grew up, but never will be. __invoke_of is carefully crafted so that it can serve as its own enable_if (type doesn't exist if the signature isn't invokable). All of this work is C++11 only.
llvm-svn: 131639
2011-05-19 15:05:04 +00:00
Howard Hinnant c2bf9e1851 This commit was accidental. Reverting.
llvm-svn: 131514
2011-05-18 00:47:00 +00:00
Howard Hinnant 781afe1934 A bunch of future tests got invalidated with the latest updates to thread. Fixed the tests.
llvm-svn: 131509
2011-05-17 23:32:48 +00:00
Howard Hinnant dcaa2e9294 Fix ambiguity in operator== of scoped_allocator_adaptor.
llvm-svn: 131485
2011-05-17 20:41:18 +00:00
Howard Hinnant 651fedb82c Fixed bug in recently introduced bind move constructor
llvm-svn: 131484
2011-05-17 20:27:51 +00:00
Howard Hinnant 5fdeee5b3a Fix and beef up test bug for move_if_noexcept
llvm-svn: 131483
2011-05-17 20:10:42 +00:00
Howard Hinnant fe7e3eeddc Clean up a bunch of warnings in the tests, 3 of which actually turned out to be test bugs.
llvm-svn: 131479
2011-05-17 19:12:55 +00:00
Howard Hinnant 872a91167e Brought call_once variadic call up to current spec, which allows move-only functors and move-only arguments, but disallows functors with non-const lvalue reference parameters.
llvm-svn: 131414
2011-05-16 19:05:11 +00:00
Howard Hinnant 8df61ea84d Brought thread variadic constructor up to current spec, which allows move-only functors and move-only arguments, but disallows functors with non-const lvalue reference parameters.
llvm-svn: 131413
2011-05-16 18:40:35 +00:00
Howard Hinnant 7735ccaf86 Supply missing std::qualifier to call.
llvm-svn: 131410
2011-05-16 16:20:59 +00:00
Howard Hinnant 23fdcd70c6 Spit 5th bullet __invoke into function pointers and everything else because result_of doesn't deal with function pointers.
llvm-svn: 131409
2011-05-16 16:20:21 +00:00
Howard Hinnant 07de7bcaa0 Supply missing move ctor in __bind_r, though this one will eventually be defaulted
llvm-svn: 131408
2011-05-16 16:19:01 +00:00
Howard Hinnant 15c34d48ba Redesign of result_of to handle reference-qualified member functions
llvm-svn: 131407
2011-05-16 16:17:21 +00:00
Howard Hinnant b12c37b302 Fix type-o found by Justin Hibbits
llvm-svn: 131348
2011-05-14 18:20:45 +00:00
Howard Hinnant 6db38ae05c Fix type-o found by Justin Hibbits
llvm-svn: 131346
2011-05-14 17:24:22 +00:00
Howard Hinnant af6c26b366 Warning suppression in test.
llvm-svn: 131344
2011-05-14 15:38:08 +00:00
Howard Hinnant 3962348edf Warning suppression in test.
llvm-svn: 131343
2011-05-14 15:36:25 +00:00
Howard Hinnant 6c4c6a8047 Warning suppression in test.
llvm-svn: 131341
2011-05-14 14:53:12 +00:00
Howard Hinnant c6b9ff1169 Correction to hexfloat hack.
llvm-svn: 131340
2011-05-14 14:33:56 +00:00
Howard Hinnant e0d67710e9 Fix test bug.
llvm-svn: 131328
2011-05-14 00:07:53 +00:00
Howard Hinnant fe7cffaf57 Suppress some warings in the tests.
llvm-svn: 131327
2011-05-14 00:04:05 +00:00
Howard Hinnant a7fa0710cb Suppress some warings in the tests.
llvm-svn: 131326
2011-05-13 23:59:50 +00:00
Howard Hinnant fb7f07e3bd http://llvm.org/bugs/show_bug.cgi?id=9854. Also created an emulated hexfloat literal for use in some of the tests. <sigh> And cleaned up some harmless but irritating warnings in the tests.
llvm-svn: 131318
2011-05-13 21:52:40 +00:00
Howard Hinnant 3e71464d50 http://llvm.org/bugs/show_bug.cgi?id=9118
llvm-svn: 131296
2011-05-13 17:16:06 +00:00
Howard Hinnant 467fc38320 A much improved type_traits for C++0x. Not yet done: is_trivially_constructible, is_trivially_assignable and underlying_type.
llvm-svn: 131291
2011-05-13 14:08:16 +00:00
Howard Hinnant 5dbf45dfe0 CWG 1170 has been fixed for destructors
llvm-svn: 131290
2011-05-13 13:39:08 +00:00
Alexis Hunt 662d91f1cd __is_trivially_copyable now supplied by clang
llvm-svn: 131271
2011-05-13 00:32:09 +00:00
Howard Hinnant f208605bd4 Corrected misspelling
llvm-svn: 131265
2011-05-13 00:03:08 +00:00
Howard Hinnant b24491b73e Updated to reflect updated use of existing clang support
llvm-svn: 131264
2011-05-13 00:01:01 +00:00
Howard Hinnant f738497500 Corrected some bugs in both memory and the tests. Preparing for being able to turn on support for alias templates.
llvm-svn: 131199
2011-05-11 20:21:19 +00:00
Howard Hinnant 08ad63b580 Redid nothrow traits in terms of non-nothrow traits when noexcept is available
llvm-svn: 131198
2011-05-11 20:19:40 +00:00
Howard Hinnant 0cfdb9517e Updated type_traits and the type_traits design doc with recent work done in clang.
llvm-svn: 131090
2011-05-09 19:21:17 +00:00
Nick Kledzik f9ad245c90 change RC_BUILDIT to RC_XBS for detecting Apple build environment
llvm-svn: 130970
2011-05-06 01:13:20 +00:00
Nick Kledzik 7db91cefb2 add support for setjmp/longjmp based exceptions
llvm-svn: 130938
2011-05-05 18:45:41 +00:00
Nick Kledzik de214e29df <rdar://problem/9014045> more support for Apple internal build environments
llvm-svn: 130872
2011-05-04 21:50:46 +00:00
Howard Hinnant 575d41ee92 Correction to set of overloaded pair constructors for C++0x
llvm-svn: 130521
2011-04-29 18:10:55 +00:00
Douglas Gregor 6c38001ec5 Qualify calls to std::next(), to avoid conflicts with
libraries/applications that define their own 'next' template.

llvm-svn: 130511
2011-04-29 16:20:26 +00:00
Howard Hinnant 9d06c8c326 http://llvm.org/bugs/show_bug.cgi?id=9765
llvm-svn: 129910
2011-04-21 14:29:59 +00:00
Howard Hinnant 866d73c7b4 Think-o in poisson_distribution at mean == 10
llvm-svn: 129520
2011-04-14 15:59:22 +00:00
Howard Hinnant a23551cad4 Fix bug in Sseq constraints found by Seth Cantrell
llvm-svn: 129285
2011-04-11 18:22:12 +00:00
Howard Hinnant 40dab2ce86 http://llvm.org/bugs/show_bug.cgi?id=9672
llvm-svn: 129266
2011-04-11 02:18:41 +00:00
Howard Hinnant 784ba65787 Changes to cerrno to protect against the case the ELAST is not defined.
llvm-svn: 129255
2011-04-10 19:46:55 +00:00
Howard Hinnant 1444d85b5a time_get was missing the %F specifier. This change impacts the binary.
llvm-svn: 129251
2011-04-10 17:54:14 +00:00
Howard Hinnant a9c7c14ebb Chris Jefferson found a missing const (Bugzilla 9632)
llvm-svn: 128885
2011-04-05 14:55:28 +00:00
Howard Hinnant e4b11156d7 Corrected tests for http://llvm.org/bugs/show_bug.cgi?id=9351
llvm-svn: 128807
2011-04-04 01:42:30 +00:00
Howard Hinnant e4bafbee25 ... And these wonderful tests.
llvm-svn: 128797
2011-04-03 20:06:31 +00:00
Howard Hinnant dbe14303da Chris Jefferson submitted this patch to fix http://llvm.org/bugs/show_bug.cgi?id=9351
llvm-svn: 128796
2011-04-03 20:05:29 +00:00
Howard Hinnant 890477f333 Provide a more readable error message for <atomic> until it is implemented.
llvm-svn: 128636
2011-03-31 16:39:39 +00:00
Howard Hinnant 382600ff97 Jonathan Sauer found a bug in the way ^ was handled
llvm-svn: 128350
2011-03-26 20:02:27 +00:00
Howard Hinnant 8e2617780a Jonathan Sauer updated is_base_of traits status
llvm-svn: 128349
2011-03-26 19:58:42 +00:00
Nick Kledzik 4f8ccdf2f8 <rdar://problem/9073695> std::uncaught_exception() becomes true before evaluating the throw-expression rather than after
llvm-svn: 127499
2011-03-11 22:33:07 +00:00
Howard Hinnant 8f934e42d8 http://llvm.org/bugs/show_bug.cgi?id=9444
llvm-svn: 127412
2011-03-10 17:27:57 +00:00
Howard Hinnant 8cad46266c I have to revert this recent fix to tuple conversions until clang implements cwg 1170. Without this fix pair and tuple don't convert properly. With it, associative containers get access errors when they shouldn't. cwg 1170 fixes the latter.
llvm-svn: 127411
2011-03-10 17:27:30 +00:00
Howard Hinnant 709b108ae1 Corrected const-correctness on nullptr type_traits, and beefed up the test for nullptr_t.
llvm-svn: 127338
2011-03-09 17:17:06 +00:00
Howard Hinnant d6c80dec76 Walter Brown brought to my attention that type_traits was failing to correctly classify nullptr_t
llvm-svn: 127334
2011-03-09 15:10:51 +00:00
Howard Hinnant f1bf6f9a3a Chris Jefferson found a defect in the C++0x working draft by trying to run libc++ against boost. I've submitted an issue to the LWG, and this commit attempts to implement the proposed resolution of that defect report. I'd point to the issue but it hasn't been put into the LWG list yet. The title of the issue will be: Stage 2 accumulate incompatibilty
llvm-svn: 127303
2011-03-09 01:03:19 +00:00
Howard Hinnant 3145a948d6 http://llvm.org/bugs/show_bug.cgi?id=9349 I introduced a bug with the last fix and Ryuta Suzuki has corrected it. And hopefully I committed Ryuta Suzuki's directions correctly this time.
llvm-svn: 126917
2011-03-03 01:59:23 +00:00
Howard Hinnant 01533ed9ad http://llvm.org/bugs/show_bug.cgi?id=9349 I have not personally tested this patch. Please let me know if it causes problems.
llvm-svn: 126846
2011-03-02 17:29:46 +00:00
Howard Hinnant b5d166ad93 Chris Jefferson found this bug to pair/tuple introduced by a recent change to the draft that I missed.
llvm-svn: 126743
2011-03-01 14:27:55 +00:00
Howard Hinnant 99847d2bf1 Fix copy_n to increment only n-1 times for an input iterator. This works much better with std::istream_iterator<int>(std::cin). Credit: Matan Nassau.
llvm-svn: 126581
2011-02-27 20:55:39 +00:00
Howard Hinnant 73736effce Fixed two problems found by Chris Jefferson: Made operator>> for char consistent with gcc. Opened an LWG issue on this one. 2) Renamed some private typedefs which are causing boost grief.
llvm-svn: 126576
2011-02-27 18:02:02 +00:00
Howard Hinnant a8d8ca4d6f http://llvm.org/bugs/show_bug.cgi?id=9326
llvm-svn: 126504
2011-02-25 19:52:41 +00:00
Howard Hinnant 0c68ed006d Chris Jefferson spotted a problem with messages_base::catalog while getting libc++ to work on boost. The standard says this type must be an int. But this type is the key returned by the OS facility catopen. On OS X the type returned by catopen is void*, which doesn't fit into an int on 64 bit platforms. Chris suggested using ptrdiff_t instead of void*. It still isn't compliant with the standard, but chances are that this change will fix what is ailing boost. Chris also supplied the algorithm for distinguishing high-order pointers from error conditions. Thanks Chris.
llvm-svn: 126462
2011-02-25 00:51:08 +00:00
Howard Hinnant 80a3cadab7 Jean-Daniel Dupas fixes install directions
llvm-svn: 126222
2011-02-22 14:18:34 +00:00
Howard Hinnant 1a36219c86 Change install name to libc++.1.dylib
llvm-svn: 125626
2011-02-16 00:40:06 +00:00
Howard Hinnant a0fe8c436e Chris Jefferson noted many places where function calls needed to be qualified (thanks Chris).
llvm-svn: 125510
2011-02-14 19:12:38 +00:00
Howard Hinnant bd356a8011 Update testit to default to clang
llvm-svn: 125498
2011-02-14 18:06:10 +00:00
Howard Hinnant f190990546 fix stupid type-o
llvm-svn: 125311
2011-02-10 21:34:42 +00:00
Howard Hinnant 05033424f9 Installed __has_feature(is_convertible_to) and __has_feature(is_base_of)
llvm-svn: 125290
2011-02-10 17:46:03 +00:00
Howard Hinnant da3b02fdb3 Missing traits::to_int_type in fstream
llvm-svn: 124727
2011-02-02 17:37:16 +00:00
Howard Hinnant 72c5e14203 Qualify calls to addressof with std::. Bug 9106
llvm-svn: 124726
2011-02-02 17:36:20 +00:00
Howard Hinnant 2774545736 Bug 9096 - list::iterator not default constructible
llvm-svn: 124508
2011-01-28 23:46:28 +00:00
Howard Hinnant d44be13fa8 minor corrections to test, and hook is_base_of up to clang intrinsic
llvm-svn: 124502
2011-01-28 20:00:37 +00:00
Douglas Gregor 59f5dc60d2 Eliminate extraneous {};
llvm-svn: 124456
2011-01-27 23:36:08 +00:00
Howard Hinnant e4de279009 Updated getting started directions.
llvm-svn: 124452
2011-01-27 23:18:19 +00:00
Howard Hinnant 8d3b8265a6 updated buildit to work with recent clang updates
llvm-svn: 124432
2011-01-27 21:01:51 +00:00
Howard Hinnant 80b2905b83 clang found a missing return statement.
llvm-svn: 124431
2011-01-27 21:01:11 +00:00
Howard Hinnant eb92df7e9e Make forward_list splice_after and merge work for lvalue lists
llvm-svn: 124430
2011-01-27 21:00:35 +00:00
Howard Hinnant 7015add232 Reverted previous fix to is_convertible as it caused more problems than it fixed. But this reverted fix will only matter for non-clang compilers. Installed __is_convertible_to for clang.
llvm-svn: 124429
2011-01-27 21:00:00 +00:00
Douglas Gregor 71711a673b Inline namespaces are always available in Clang. Rely on that without
testing via __has_feature, since __has_feature for C++0x features no
longer evaluates true in C++98/03 mode.

Also, eliminate the redundant using directive. Inline namespaces make
their members visible in the enclosing namespace automatically.

llvm-svn: 124293
2011-01-26 15:39:56 +00:00
Douglas Gregor d18302f1bb Teach move_iterator that rvalue references cannot bind to non-function
lvalues, nor can one take the address of an xvalue, by adding
appropriate static_cast's (in the first case) and a temporary (in the
second case).

llvm-svn: 124255
2011-01-26 00:12:48 +00:00
Howard Hinnant ad16003517 Add always_inline to string move constructors
llvm-svn: 124252
2011-01-26 00:06:59 +00:00
Douglas Gregor 175a104028 Remove an (incorrect) compiler workaround in the __mu function. The
workaround relied on rvalue references binding to non-function
lvalues, while the original formulation (with std::forward) does the
right thing.

llvm-svn: 124241
2011-01-25 23:11:15 +00:00
Howard Hinnant 389eb9b54a placeholder test
llvm-svn: 124193
2011-01-25 16:32:04 +00:00
Howard Hinnant 2a3f1bc13f tweak for readability (no functionality change)
llvm-svn: 124192
2011-01-25 16:31:30 +00:00
Douglas Gregor 912e161ce0 An rvalue reference cannot bind to an lvalue, so static_cast the
result of the __tuple_leaf::get() call to an rvalue reference when
returning from tuple's get().

llvm-svn: 124190
2011-01-25 16:14:21 +00:00
Douglas Gregor a7b2241407 Eliminate the C++0x-only is_convertible testing function that accepts
a cv-qualifier rvalue reference to the type, e.g.,

  template <class _Tp> char  __test(const volatile typename remove_reference<_Tp>::type&&);

The use of this function signature rather than the more
straightforward one used in C++98/03 mode, e.g.,

  template <class _Tp> char  __test(_Tp);

is broken in two ways:

  1) An rvalue reference cannot bind to lvalues, so is_convertible<X&,
  X&>::value would be false. This breaks two of the unique_ptr tests
  on Clang and GCC >= 4.5. Prior GCC's seem to have allowed rvalue
  references to bind to lvalues, allowing this bug to slip in.

  2) By adding cv-qualifiers to the type we're converting to, we get
  some incorrect "true" results for, e.g., is_convertible<const X&, X&>::value.

llvm-svn: 124166
2011-01-25 01:15:41 +00:00
Howard Hinnant 465abe92a5 Chandler Carruth changed >> to > > in several places.
llvm-svn: 124120
2011-01-24 16:07:25 +00:00
Chandler Carruth ce395a9acd Teach the Lit configuration to actually use the cxx0x setting when
constructing compile flags, and to link against the 'rt' library on
Linux for clock_gettime and friends.

llvm-svn: 124052
2011-01-23 01:05:20 +00:00
Howard Hinnant 2503626838 Add attribute to inlined member.
llvm-svn: 123392
2011-01-13 20:05:05 +00:00
Howard Hinnant 59a7dc95de Fixing an ambiguity in variadics found by clang.
llvm-svn: 123337
2011-01-12 22:56:59 +00:00
Howard Hinnant 119cd0ba12 fix guard
llvm-svn: 123269
2011-01-11 20:02:45 +00:00
Howard Hinnant b5b2a1e19a Two minor fixes: 1. Put integral_constant conversion to integral in even without constexpr support. 2. Add ios_base to <iosfwd>. The latter is being tracked by LWG 2026.
llvm-svn: 123080
2011-01-08 20:00:48 +00:00
Howard Hinnant 36fd9f96cf Reverting an old optimization that conflicts with the new allocator model, and causes some test casees to compile that shouldn't.
llvm-svn: 122830
2011-01-04 19:53:31 +00:00
Howard Hinnant ab061a656d Marshall Clow's fix for Bug 8421.
llvm-svn: 122825
2011-01-04 19:21:05 +00:00
Howard Hinnant c950e77d1d Effort to reduce the number of exported symbols
llvm-svn: 122057
2010-12-17 14:46:43 +00:00
Howard Hinnant ba31cbdbca Reduced copying cost of tuple_cat from quadratic to linear.
llvm-svn: 121655
2010-12-12 23:04:37 +00:00
Howard Hinnant 7f64810bc8 LWG 1385 [FCD] tuple_cat should be a single variadic signature (http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#1385). This issue is only in Ready status, meaning it is not official, but probably will be this March in Madrid. It was tentatively accepted in Batavia with the previso that Bill and I didn't have any problems implementing it. This is my part of that agreement.
llvm-svn: 121619
2010-12-11 20:47:50 +00:00
Howard Hinnant d4a83d078c The implementation of the new definition of result_of (N3123) resulted in some test failures in [func.memfn] that I failed to previously notice. This corrects that mistake.
llvm-svn: 121600
2010-12-11 00:05:19 +00:00
Michael J. Spencer f5799be4a8 Add CMake build and fix major Linux blockers.
llvm-svn: 121510
2010-12-10 19:47:54 +00:00