]> granicus.if.org Git - llvm/commitdiff
Optional specialization for trivially copyable types, part2
authorSerge Guelton <sguelton@redhat.com>
Thu, 14 Feb 2019 19:41:44 +0000 (19:41 +0000)
committerSerge Guelton <sguelton@redhat.com>
Thu, 14 Feb 2019 19:41:44 +0000 (19:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354055 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/Optional.h

index c628df9d711c1e0d5d3313abbfbec668e54f9859..f7d35c745fb7895ac22d91170e64afa172675ec7 100644 (file)
@@ -116,7 +116,9 @@ template <typename T> struct OptionalStorage<T, true> {
 
   OptionalStorage() = default;
 
-  OptionalStorage(const T &y) : hasVal(true) { new (storage.buffer) T(y); }
+  OptionalStorage(const T &y) : hasVal(true) {
+    std::memcpy(storage.buffer, reinterpret_cast<char const *>(&y), sizeof(T));
+  }
   OptionalStorage(const OptionalStorage &O) = default;
   OptionalStorage(T &&y) : hasVal(true) {
     std::memcpy(storage.buffer, reinterpret_cast<char*>(&y), sizeof(T));