Kajetan Johannes Hammerle 4 өдөр өмнө
parent
commit
7b06b4a136

+ 7 - 6
modules/StringJoin.cppm

@@ -1,9 +1,10 @@
 export module Core.StringJoin;
 
 import Core.Meta;
+import Core.Types;
 
 namespace Core {
-    template<int N>
+    template<size_t N>
     struct MergedString {
         char s[N];
 
@@ -12,26 +13,26 @@ namespace Core {
         }
     };
 
-    template<int N1, int N2>
+    template<size_t N1, size_t N2>
     consteval auto mergeStringsBase(const char (&a)[N1], const char (&b)[N2]) {
         static_assert(N1 > 0);
         MergedString<N1 + N2 - 1> s;
-        for(int i = 0; i < N1; i++) {
+        for(size_t i = 0; i < N1; i++) {
             s.s[i] = a[i];
         }
-        for(int i = 0; i < N2; i++) {
+        for(size_t i = 0; i < N2; i++) {
             s.s[i + N1 - 1] = b[i];
         }
         return s;
     }
 
-    template<int N1, int N2>
+    template<size_t N1, size_t N2>
     consteval auto mergeStringsBase(
         const MergedString<N1>& a, const char (&b)[N2]) {
         return mergeStringsBase<N1, N2>(a.s, b);
     }
 
-    template<int N1, int N2>
+    template<size_t N1, size_t N2>
     consteval auto mergeStringsBase(
         const char (&a)[N1], const MergedString<N2>& b) {
         return mergeStringsBase<N1, N2>(a, b.s);

+ 6 - 1
modules/Utility.cppm

@@ -8,7 +8,6 @@ export import Core.Types;
 
 import Core.Meta;
 import Core.Std;
-import Core.New;
 
 #define SOURCE const std::source_location& l = std::source_location::current()
 
@@ -57,7 +56,13 @@ export namespace Core {
 
     template<typename T>
     T* newWithSourceN(size_t n) noexcept {
+        // GCC does not realize this is noexcept, ...
+        // checking the empty constructor instead
+#if defined(__GNUC__) && !defined(__clang__)
+        static_assert(noexcept(new(std::source_location::current()) T()));
+#else
         static_assert(noexcept(new(std::source_location::current()) T[n]));
+#endif
         return new(std::source_location::current()) T[n];
     }
 #else