Quellcode durchsuchen

any: internal support for both aggreagates and non-aggregates (qol enhancement :)

Michele Caini vor 4 Jahren
Ursprung
Commit
5dbdb1bcb5
1 geänderte Dateien mit 10 neuen und 2 gelöschten Zeilen
  1. 10 2
      src/entt/core/any.hpp

+ 10 - 2
src/entt/core/any.hpp

@@ -178,9 +178,17 @@ class basic_any {
                 static_assert(sizeof...(Args) == 1u && (std::is_lvalue_reference_v<Args> && ...), "Invalid arguments");
                 static_assert(sizeof...(Args) == 1u && (std::is_lvalue_reference_v<Args> && ...), "Invalid arguments");
                 instance = (std::addressof(args), ...);
                 instance = (std::addressof(args), ...);
             } else if constexpr(in_situ<Type>) {
             } else if constexpr(in_situ<Type>) {
-                new (&storage) Type{std::forward<Args>(args)...};
+                if constexpr(std::is_aggregate_v<Type>) {
+                    new (&storage) Type{std::forward<Args>(args)...};
+                } else {
+                    new (&storage) Type(std::forward<Args>(args)...);
+                }
             } else {
             } else {
-                instance = new Type{std::forward<Args>(args)...};
+                if constexpr(std::is_aggregate_v<Type>) {
+                    instance = new Type{std::forward<Args>(args)...};
+                } else {
+                    instance = new Type(std::forward<Args>(args)...);
+                }
             }
             }
         }
         }
     }
     }