diff --git a/include/boost/archive/archive_exception.hpp b/include/boost/archive/archive_exception.hpp index e95b6f15e..0e9dddff6 100644 --- a/include/boost/archive/archive_exception.hpp +++ b/include/boost/archive/archive_exception.hpp @@ -39,8 +39,11 @@ namespace archive { ////////////////////////////////////////////////////////////////////// // exceptions thrown by archives // +// The base is deliberately not virtual: a virtual one would give the +// class an implicit vbase destructor, which cl and clang-cl expect to +// find in different modules. See issue #321. class BOOST_SYMBOL_VISIBLE archive_exception : - public virtual std::exception + public std::exception { private: char m_buffer[128]; diff --git a/include/boost/archive/xml_archive_exception.hpp b/include/boost/archive/xml_archive_exception.hpp index 66be31f70..0ebb0a2ce 100644 --- a/include/boost/archive/xml_archive_exception.hpp +++ b/include/boost/archive/xml_archive_exception.hpp @@ -31,8 +31,10 @@ namespace archive { ////////////////////////////////////////////////////////////////////// // exceptions thrown by xml archives // +// The base is deliberately not virtual, for the reason given in +// archive_exception.hpp. See issue #321. class BOOST_SYMBOL_VISIBLE xml_archive_exception : - public virtual boost::archive::archive_exception + public boost::archive::archive_exception { public: typedef enum {