--- cereal-1.2.2/include/cereal/archives/json.hpp.orig	2018-10-23 22:51:17.492949400 +0300
+++ cereal-1.2.2/include/cereal/archives/json.hpp	2018-10-23 22:51:53.806026400 +0300
@@ -209,11 +209,13 @@
         {
           case NodeType::StartArray:
             itsWriter.StartArray();
+            break;
           case NodeType::InArray:
             itsWriter.EndArray();
             break;
           case NodeType::StartObject:
             itsWriter.StartObject();
+            break;
           case NodeType::InObject:
             itsWriter.EndObject();
             break;
--- cereal-1.2.2/include/cereal/external/rapidjson/document.h.orig	2018-10-23 22:54:53.144283900 +0300
+++ cereal-1.2.2/include/cereal/external/rapidjson/document.h	2018-10-23 22:56:47.544827300 +0300
@@ -1425,7 +1425,7 @@
         MemberIterator pos = MemberBegin() + (first - MemberBegin());
         for (MemberIterator itr = pos; itr != last; ++itr)
             itr->~Member();
-        std::memmove(&*pos, &*last, static_cast<size_t>(MemberEnd() - last) * sizeof(Member));
+        std::memmove(static_cast<void*>(&*pos), &*last, static_cast<size_t>(MemberEnd() - last) * sizeof(Member));
         data_.o.size -= static_cast<SizeType>(last - first);
         return pos;
     }
@@ -1629,7 +1629,7 @@
         ValueIterator pos = Begin() + (first - Begin());
         for (ValueIterator itr = pos; itr != last; ++itr)
             itr->~GenericValue();       
-        std::memmove(pos, last, static_cast<size_t>(End() - last) * sizeof(GenericValue));
+        std::memmove(static_cast<void*>(pos), last, static_cast<size_t>(End() - last) * sizeof(GenericValue));
         data_.a.size -= static_cast<SizeType>(last - first);
         return pos;
     }
@@ -1936,7 +1936,7 @@
         if (count) {
             GenericValue* e = static_cast<GenericValue*>(allocator.Malloc(count * sizeof(GenericValue)));
             SetElementsPointer(e);
-            std::memcpy(e, values, count * sizeof(GenericValue));
+            std::memcpy(static_cast<void*>(e), values, count * sizeof(GenericValue));
         }
         else
             SetElementsPointer(0);
@@ -1949,7 +1949,7 @@
         if (count) {
             Member* m = static_cast<Member*>(allocator.Malloc(count * sizeof(Member)));
             SetMembersPointer(m);
-            std::memcpy(m, members, count * sizeof(Member));
+            std::memcpy(static_cast<void*>(m), members, count * sizeof(Member));
         }
         else
             SetMembersPointer(0);
--- cereal-1.2.2/include/cereal/types/memory.hpp.orig	2018-10-23 22:57:31.005313100 +0300
+++ cereal-1.2.2/include/cereal/types/memory.hpp	2018-10-23 22:57:52.474541000 +0300
@@ -145,7 +145,7 @@
           itsState(),
           itsRestored( false )
         {
-          std::memcpy( &itsState, itsPtr, sizeof(ParentType) );
+          std::memcpy( static_cast<void*>(&itsState), itsPtr, sizeof(ParentType) );
         }
 
         //! Restores the state of the held pointer (can only be done once)
@@ -153,7 +153,7 @@
         {
           if( !itsRestored )
           {
-            std::memcpy( itsPtr, &itsState, sizeof(ParentType) );
+            std::memcpy( static_cast<void*>(itsPtr), &itsState, sizeof(ParentType) );
             itsRestored = true;
           }
         }
--- cereal-1.2.2/unittests/doctest.h.orig	2018-10-23 23:02:41.789088900 +0300
+++ cereal-1.2.2/unittests/doctest.h	2018-10-23 23:04:38.035737800 +0300
@@ -1288,7 +1288,7 @@
                                                        __FILE__, __LINE__, #expr, #as);            \
             try {                                                                                  \
                 expr;                                                                              \
-            } catch(as) {                                                                          \
+            } catch(as&) {                                                                         \
                 _DOCTEST_RB.m_threw    = true;                                                     \
                 _DOCTEST_RB.m_threw_as = true;                                                     \
             } catch(...) { _DOCTEST_RB.m_threw = true; }                                           \
