From a164ee4eca349e44c0d11ef110a56ffbca1ec91b Mon Sep 17 00:00:00 2001 From: Narr the Reg <5944268+german77@users.noreply.github.com> Date: Wed, 27 May 2026 19:04:30 -0600 Subject: [PATCH 1/3] prim: remove auto from seadDelegate --- include/prim/seadDelegate.h | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/include/prim/seadDelegate.h b/include/prim/seadDelegate.h index 18f5867d..39eeabc3 100644 --- a/include/prim/seadDelegate.h +++ b/include/prim/seadDelegate.h @@ -360,7 +360,7 @@ class LambdaDelegate : public IDelegate explicit LambdaDelegate(Lambda l) : mLambda(std::move(l)) {} auto invoke() override { return mLambda(); } auto operator()() const { return mLambda(); } - auto clone(Heap* heap) const override { return new (heap) LambdaDelegate(*this); } + LambdaDelegate* clone(Heap* heap) const override { return new (heap) LambdaDelegate(*this); } protected: Lambda mLambda; @@ -371,9 +371,9 @@ class LambdaDelegateR : public IDelegateR { public: explicit LambdaDelegateR(Lambda l) : mLambda(std::move(l)) {} - auto invoke() override { return mLambda(); } - auto operator()() const { return mLambda(); } - auto clone(Heap* heap) const override { return new (heap) LambdaDelegateR(*this); } + R invoke() override { return mLambda(); } + R operator()() const { return mLambda(); } + LambdaDelegateR* clone(Heap* heap) const override { return new (heap) LambdaDelegateR(*this); } protected: Lambda mLambda; @@ -386,7 +386,7 @@ class LambdaDelegate1 : public IDelegate1 explicit LambdaDelegate1(Lambda l) : mLambda(std::move(l)) {} auto invoke(A1 a1) override { return mLambda(a1); } auto operator()(A1 a1) const { return mLambda(a1); } - auto clone(Heap* heap) const override { return new (heap) LambdaDelegate1(*this); } + LambdaDelegate1* clone(Heap* heap) const override { return new (heap) LambdaDelegate1(*this); } protected: Lambda mLambda; @@ -397,9 +397,12 @@ class LambdaDelegate1R : public IDelegate1R { public: explicit LambdaDelegate1R(Lambda l) : mLambda(std::move(l)) {} - auto invoke(A1 a1) override { return mLambda(a1); } - auto operator()(A1 a1) const { return mLambda(a1); } - auto clone(Heap* heap) const override { return new (heap) LambdaDelegate1R(*this); } + R invoke(A1 a1) override { return mLambda(a1); } + R operator()(A1 a1) const { return mLambda(a1); } + LambdaDelegate1R* clone(Heap* heap) const override + { + return new (heap) LambdaDelegate1R(*this); + } protected: Lambda mLambda; @@ -412,7 +415,7 @@ class LambdaDelegate2 : public IDelegate2 explicit LambdaDelegate2(Lambda l) : mLambda(std::move(l)) {} auto invoke(A1 a1, A2 a2) override { return mLambda(a1, a2); } auto operator()(A1 a1, A2 a2) const { return mLambda(a1, a2); } - auto clone(Heap* heap) const override { return new (heap) LambdaDelegate2(*this); } + LambdaDelegate2* clone(Heap* heap) const override { return new (heap) LambdaDelegate2(*this); } protected: Lambda mLambda; @@ -423,9 +426,9 @@ class LambdaDelegate2R : public IDelegate2R { public: explicit LambdaDelegate2R(Lambda l) : mLambda(std::move(l)) {} - auto invoke(A1 a1, A2 a2) override { return mLambda(a1, a2); } - auto operator()(A1 a1, A2 a2) const { return mLambda(a1, a2); } - auto clone(Heap* heap) const override { return new (heap) LambdaDelegate2R(*this); } + R invoke(A1 a1, A2 a2) override { return mLambda(a1, a2); } + R operator()(A1 a1, A2 a2) const { return mLambda(a1, a2); } + LambdaDelegate2R clone(Heap* heap) const override { return new (heap) LambdaDelegate2R(*this); } protected: Lambda mLambda; From 93928e8513718c61f0a18be99c1b4dbd7e57c9d7 Mon Sep 17 00:00:00 2001 From: Narr the Reg <5944268+german77@users.noreply.github.com> Date: Thu, 28 May 2026 09:56:06 -0600 Subject: [PATCH 2/3] First review --- include/prim/seadDelegate.h | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/include/prim/seadDelegate.h b/include/prim/seadDelegate.h index 39eeabc3..a97740cc 100644 --- a/include/prim/seadDelegate.h +++ b/include/prim/seadDelegate.h @@ -358,8 +358,8 @@ class LambdaDelegate : public IDelegate { public: explicit LambdaDelegate(Lambda l) : mLambda(std::move(l)) {} - auto invoke() override { return mLambda(); } - auto operator()() const { return mLambda(); } + void invoke() override { mLambda(); } + void operator()() const { mLambda(); } LambdaDelegate* clone(Heap* heap) const override { return new (heap) LambdaDelegate(*this); } protected: @@ -384,8 +384,8 @@ class LambdaDelegate1 : public IDelegate1 { public: explicit LambdaDelegate1(Lambda l) : mLambda(std::move(l)) {} - auto invoke(A1 a1) override { return mLambda(a1); } - auto operator()(A1 a1) const { return mLambda(a1); } + void invoke(A1 a1) override { mLambda(a1); } + void operator()(A1 a1) const { mLambda(a1); } LambdaDelegate1* clone(Heap* heap) const override { return new (heap) LambdaDelegate1(*this); } protected: @@ -413,8 +413,8 @@ class LambdaDelegate2 : public IDelegate2 { public: explicit LambdaDelegate2(Lambda l) : mLambda(std::move(l)) {} - auto invoke(A1 a1, A2 a2) override { return mLambda(a1, a2); } - auto operator()(A1 a1, A2 a2) const { return mLambda(a1, a2); } + void invoke(A1 a1, A2 a2) override { mLambda(a1, a2); } + void operator()(A1 a1, A2 a2) const { mLambda(a1, a2); } LambdaDelegate2* clone(Heap* heap) const override { return new (heap) LambdaDelegate2(*this); } protected: @@ -428,7 +428,10 @@ class LambdaDelegate2R : public IDelegate2R explicit LambdaDelegate2R(Lambda l) : mLambda(std::move(l)) {} R invoke(A1 a1, A2 a2) override { return mLambda(a1, a2); } R operator()(A1 a1, A2 a2) const { return mLambda(a1, a2); } - LambdaDelegate2R clone(Heap* heap) const override { return new (heap) LambdaDelegate2R(*this); } + LambdaDelegate2R* clone(Heap* heap) const override + { + return new (heap) LambdaDelegate2R(*this); + } protected: Lambda mLambda; From 27b53bd9bda32b6cffc0acfa05cc7df8618cb608 Mon Sep 17 00:00:00 2001 From: Narr the Reg <5944268+german77@users.noreply.github.com> Date: Thu, 28 May 2026 13:41:43 -0600 Subject: [PATCH 3/3] Fix UnbidDummy initialization --- include/prim/seadDelegate.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/prim/seadDelegate.h b/include/prim/seadDelegate.h index a97740cc..6197ae8d 100644 --- a/include/prim/seadDelegate.h +++ b/include/prim/seadDelegate.h @@ -580,11 +580,17 @@ class AnyDelegateR class UnbindDummy final : public Base::Interface_ { public: + UnbindDummy() {} R invoke() override { return {}; } #if SEAD_DELEGATE_ISNODUMMY bool isNoDummy() const override { return false; } #endif + private: + s32 mUnk = 1; }; + + AnyDelegateR() {} + using Base::Base; using Base::operator=; };