ee226c05af9e0187098f43fb71465a581487af9b |
|
09-Jun-2016 |
Dan Austin <danielaustin@google.com> |
Revert "Revert "Update aosp/master libcxx rebase to r263688"" This reverts commit 1d4a1edbc7e4461b59239e1b8297e9dd395a6322. Change-Id: I2909937fe582f2c5552bc86e7f4d2d5cff0de0aa
/external/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp
|
1d4a1edbc7e4461b59239e1b8297e9dd395a6322 |
|
26-May-2016 |
Dan Albert <danalbert@google.com> |
Revert "Update aosp/master libcxx rebase to r263688" The world is burning. This reverts commit c004fd909c006eec55077c52ee119e1fa338c9e9, reversing changes made to 1418e4163da4bb0b9e3fe496e51c23a0dce399d9.
/external/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp
|
f1626ad28d17b066f991c354e089f52a0268adbc |
|
26-Aug-2015 |
Eric Fiselier <eric@efcs.ca> |
[libcxx] Rewrite C++03 __invoke. Summary: This patch rewrites the C++03 `__invoke` and related meta-programming. There are a number of major changes. `__invoke` in C++03 now has a fallback overload for when the invoke expression is ill-formed (similar to C++11). This means that the `__invoke_return` traits will return `__nat` when `__invoke(...)` is ill formed. This would previously cause a compile error. Bullets 1-4 of `__invoke` have been rewritten. In the old version `__invoke` had 32 overloads for bullets 1 and 2, one for each possible cv-qualified function signature with arities 0-3. 64 overloads would be needed to support member functions with varargs. Currently these overloads were fundamentally broken. An example overload looked like: ``` template <class Rp, class Tp, class T1, class A0> Rp __invoke(Rp (Tp::*pm)(A0) const, T1&, A0&) ``` Because `A0` appeared in two different deducible contexts it would have to deduce to be an exact match or the overload would be rejected. This is made even worse because `A0` appears without a reference qualifier in the member function signature and with a reference qualifier as an `__invoke` parameter. This means that only member functions that took all of their arguments by value could be matched. One possible fix would be to make the second occurrence of `A0` appear in a non-deducible context. This way any type convertible to `A0` could be passed as the first parameter. The benefit of this approach is that the signature of the member function enforces the arity and types taken by the `__invoke` signature it generates. However nothing in the `INVOKE` specification requires this behavior. My solution is to use a `__invoke_enable_if<PM_Type, Tp>` metafunction to selectively enable the `__invoke` overloads for bullets 1, 2, 3 and 4. It uses `__member_function_traits` to inspect and extract the return type and class type of the pointer to member. Using `__member_function_traits` to inspect `PM_Type` also allows us to reduce the number of `__invoke` overloads from 32 to 8 and add varargs support at the same time. Because `__invoke_enable_if` knows the exact return type of `__invoke` for bullets 1-4 we no longer need to use `decltype(__invoke(...))` to compute the return type in the `__invoke_return*` traits. This will reduce the problems caused by `#define decltype(X) __typeof__(X)` in C++03. Tests for this change have already been committed. All tests in `test/std/utilities/function.objects` now pass in C++03, previously there were 20 failures. Reviewers: K-ballo, howard.hinnant, mclow.lists Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D11553 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@246068 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp
|
a90c6dd46005b2b14de3bb889a8d03bb34bd3256 |
|
20-Dec-2014 |
Eric Fiselier <eric@efcs.ca> |
Move test into test/std subdirectory. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@224658 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp
|