From 1e6df78ec2700231a980748fa442c7d87c083c05 Mon Sep 17 00:00:00 2001
From: mr-mocap <16119203+mr-mocap@users.noreply.github.com>
Date: Sat, 19 Aug 2023 05:10:29 -0400
Subject: [PATCH] Tidy up some ConstRef<T> and Ref<T> constructor cases (#730)

Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
---
 include/ftxui/util/ref.hpp | 11 ++++++-----
 src/ftxui/dom/canvas.cpp   |  2 +-
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/include/ftxui/util/ref.hpp b/include/ftxui/util/ref.hpp
index 1207af54..78714793 100644
--- a/include/ftxui/util/ref.hpp
+++ b/include/ftxui/util/ref.hpp
@@ -13,10 +13,11 @@ class ConstRef {
  public:
   ConstRef() = default;
   ConstRef(const ConstRef<T>&) = default;
-  ConstRef(const T& t) : variant_(t) {}
+  ConstRef(ConstRef<T>&&) = default;
+  ConstRef(T t) : variant_(std::move(t)) {}
   ConstRef(const T* t) : variant_(t) {}
 
-  // Make a "resetable" reference
+  // Make a "reseatable" reference
   ConstRef<T>& operator=(const ConstRef<T>&) = default;
 
   // Accessors:
@@ -39,11 +40,11 @@ class Ref {
  public:
   Ref() = default;
   Ref(const Ref<T>&) = default;
-  Ref(const T& t) : variant_(t) {}
-  Ref(T&& t) : variant_(std::forward<T>(t)) {}
+  Ref(Ref<T>&&) = default;
+  Ref(T t) : variant_(std::move(t)) {}
   Ref(T* t) : variant_(t) {}
 
-  // Make a "resetable" reference
+  // Make a "reseatable" reference.
   Ref<T>& operator=(const Ref<T>&) = default;
 
   // Accessors:
diff --git a/src/ftxui/dom/canvas.cpp b/src/ftxui/dom/canvas.cpp
index f42efb66..f6501fd7 100644
--- a/src/ftxui/dom/canvas.cpp
+++ b/src/ftxui/dom/canvas.cpp
@@ -849,7 +849,7 @@ class CanvasNodeBase : public Node {
 Element canvas(ConstRef<Canvas> canvas) {
   class Impl : public CanvasNodeBase {
    public:
-    explicit Impl(ConstRef<Canvas> canvas) : canvas_(canvas) {
+    explicit Impl(ConstRef<Canvas> canvas) : canvas_(std::move(canvas)) {
       requirement_.min_x = (canvas_->width() + 1) / 2;
       requirement_.min_y = (canvas_->height() + 3) / 4;
     }
-- 
GitLab