[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