diff --git a/include/ftxui/util/ref.hpp b/include/ftxui/util/ref.hpp
index 1207af542ce97718dc0c61f19f00a6c0d32bdbd7..78714793a8e3386ca67b76bd682abb4b853e7cd0 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 f42efb66d4e8a7d975ecdf7ec1c95a3a6b64fede..f6501fd7ddf34567890abd02c869bba0b2efe230 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;
     }