[llvm] r307490 - [ADT] Add a default constructor and a bool conversion to function_ref.
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 10 10:17:17 PDT 2017
This should probably be constructible from nullptr, then? (same as
std::function) But I guess that's perhaps sufficiently orthogonal to be
done separately/whenever someone wants that.
On Sat, Jul 8, 2017 at 11:13 PM Chandler Carruth via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: chandlerc
> Date: Sat Jul 8 23:12:56 2017
> New Revision: 307490
>
> URL: http://llvm.org/viewvc/llvm-project?rev=307490&view=rev
> Log:
> [ADT] Add a default constructor and a bool conversion to function_ref.
>
> The internal representation has a natural way to handle this and it
> seems nicer than having to wrap this in an optional (with its own
> separate flag).
>
> This also matches how std::function works.
>
> Modified:
> llvm/trunk/include/llvm/ADT/STLExtras.h
> llvm/trunk/unittests/ADT/FunctionRefTest.cpp
>
> Modified: llvm/trunk/include/llvm/ADT/STLExtras.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/STLExtras.h?rev=307490&r1=307489&r2=307490&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ADT/STLExtras.h (original)
> +++ llvm/trunk/include/llvm/ADT/STLExtras.h Sat Jul 8 23:12:56 2017
> @@ -100,6 +100,8 @@ class function_ref<Ret(Params...)> {
> }
>
> public:
> + function_ref() : callback(nullptr) {}
> +
> template <typename Callable>
> function_ref(Callable &&callable,
> typename std::enable_if<
> @@ -110,6 +112,8 @@ public:
> Ret operator()(Params ...params) const {
> return callback(callable, std::forward<Params>(params)...);
> }
> +
> + operator bool() const { return callback; }
> };
>
> // deleter - Very very very simple method that is used to invoke operator
>
> Modified: llvm/trunk/unittests/ADT/FunctionRefTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/FunctionRefTest.cpp?rev=307490&r1=307489&r2=307490&view=diff
>
> ==============================================================================
> --- llvm/trunk/unittests/ADT/FunctionRefTest.cpp (original)
> +++ llvm/trunk/unittests/ADT/FunctionRefTest.cpp Sat Jul 8 23:12:56 2017
> @@ -14,6 +14,20 @@ using namespace llvm;
>
> namespace {
>
> +// Ensure that there is a default constructor and we can test for a null
> +// function_ref.
> +TEST(FunctionRefTest, Null) {
> + function_ref<int()> F;
> + EXPECT_FALSE(F);
> +
> + auto L = [] { return 1; };
> + F = L;
> + EXPECT_TRUE(F);
> +
> + F = {};
> + EXPECT_FALSE(F);
> +}
> +
> // Ensure that copies of a function_ref copy the underlying state rather
> than
> // causing one function_ref to chain to the next.
> TEST(FunctionRefTest, Copy) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170710/a2ddef8f/attachment.html>
More information about the llvm-commits
mailing list