diff --git a/ui/ui_utility.h b/ui/ui_utility.h index 5e2dd81..61b53c0 100644 --- a/ui/ui_utility.h +++ b/ui/ui_utility.h @@ -56,16 +56,21 @@ inline base::unique_qptr CreateObject(Args &&...args) { template inline Value *CreateChild( - Parent *parent, + Parent parent, Args &&...args) { - Expects(parent != nullptr); + if constexpr (std::is_pointer_v) { + Expects(parent != nullptr); - if constexpr (std::is_base_of_v) { - return new Value(parent, std::forward(args)...); + if constexpr (std::is_base_of_v) { + return new Value(parent, std::forward(args)...); + } else { + return CreateChild>( + parent, + std::forward(args)...)->value(); + } } else { - return CreateChild>( - parent, - std::forward(args)...)->value(); + static_assert(requires(const Parent &t) { t.get(); }); + return new Value(parent.get(), std::forward(args)...); } }