diff --git a/Userland/Libraries/LibCore/Object.h b/Userland/Libraries/LibCore/Object.h index 51c35c8e77..cb627ba9a3 100644 --- a/Userland/Libraries/LibCore/Object.h +++ b/Userland/Libraries/LibCore/Object.h @@ -63,14 +63,18 @@ enum class TimerShouldFireWhenNotVisible { Yes }; -#define C_OBJECT(klass) \ -public: \ - virtual const char* class_name() const override { return #klass; } \ - template \ - static inline NonnullRefPtr construct(Args&&... args) \ - { \ - auto obj = adopt_ref(*new Klass(forward(args)...)); \ - return obj; \ +#define C_OBJECT(klass) \ +public: \ + virtual const char* class_name() const override { return #klass; } \ + template \ + static NonnullRefPtr construct(Args&&... args) \ + { \ + return adopt_ref(*new Klass(forward(args)...)); \ + } \ + template \ + static ErrorOr> try_create(Args&&... args) \ + { \ + return adopt_nonnull_ref_or_enomem(new (nothrow) Klass(forward(args)...)); \ } #define C_OBJECT_ABSTRACT(klass) \