From 4f66b8d8f7a0b5cd49a412c4041716e4e37c8859 Mon Sep 17 00:00:00 2001
From: alk <45172705+altalk23@users.noreply.github.com>
Date: Tue, 22 Nov 2022 16:46:03 +0300
Subject: [PATCH] add operator= to msvc string (#82)

* add operator= to msvc string
---
 codegen/src/BindingGen.cpp              | 8 +++++++-
 loader/include/Geode/c++stl/msvcstl.hpp | 7 +++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/codegen/src/BindingGen.cpp b/codegen/src/BindingGen.cpp
index c5edbbe0..6ce399fa 100644
--- a/codegen/src/BindingGen.cpp
+++ b/codegen/src/BindingGen.cpp
@@ -8,12 +8,18 @@ namespace { namespace format_strings {
 )GEN";
 
     char const* class_includes = R"GEN(#pragma once
+#include <Geode/platform/platform.hpp>
 #include <Geode/c++stl/gdstdlib.hpp>
 #include <cocos2d.h>
 #include <cocos-ext.h>
 #include <Geode/GeneratedPredeclare.hpp>
 #include <Geode/Enums.hpp>
 
+)GEN";
+
+    char const* class_no_includes = R"GEN(#pragma once
+#include <Geode/platform/platform.hpp>
+
 )GEN";
     
     char const* class_include_prereq = R"GEN(#include "{file_name}"
@@ -79,7 +85,7 @@ std::string generateBindingHeader(Root& root, ghc::filesystem::path const& singl
         if (cls.name != "GDString") {
             single_output += format_strings::class_includes;
         } else {
-            single_output += "#pragma once\n#include <Geode/platform/platform.hpp>\n";
+            single_output += format_strings::class_no_includes;
         }
 
         for (auto dep : cls.depends) {
diff --git a/loader/include/Geode/c++stl/msvcstl.hpp b/loader/include/Geode/c++stl/msvcstl.hpp
index 8f0026b1..d7c404da 100644
--- a/loader/include/Geode/c++stl/msvcstl.hpp
+++ b/loader/include/Geode/c++stl/msvcstl.hpp
@@ -43,6 +43,13 @@ namespace gd {
             (void)this->winAssign(val.c_str(), val.size());
         }
 
+        template <class Param>
+        string& operator=(Params&& param) {
+            std::string val;
+            val = std::forward<Params>(param);
+            (void)this->winAssign(val.c_str(), val.size());
+        }
+
         ~string() {
             (void)this->winDtor();
         }