From 6d1014fa8f67d4f997c0580a90df075008e0f34c Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 25 Apr 2024 17:32:29 +0300 Subject: [PATCH] Added ability to provide not_null to CreateChild function. --- ui/ui_utility.h | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) 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)...); } }