better documentation
parent
0517eee084
commit
c4c15facba
|
@ -18,7 +18,25 @@
|
||||||
#include <boost/serialization/detail/stack_constructor.hpp>
|
#include <boost/serialization/detail/stack_constructor.hpp>
|
||||||
#include <boost/serialization/detail/is_default_constructible.hpp>
|
#include <boost/serialization/detail/is_default_constructible.hpp>
|
||||||
|
|
||||||
//!!!!!!!!! I don't completely understand or know if this is correct but compilation works!!!!!!!!!!!
|
/** A bunch of declarations to deal with gcc bug
|
||||||
|
* The compiler has a difficult time distinguisihing between:
|
||||||
|
*
|
||||||
|
* template<template <Archive, class U> class SPT> void load(Archive, SPT<U>&, const unsigned int) : <boost/serialization/shared_ptr.hpp>
|
||||||
|
*
|
||||||
|
* and
|
||||||
|
*
|
||||||
|
* template<T> void load(Archive, std::optional<T>&, const unsigned int) : <std_optional_serialization.h>
|
||||||
|
*
|
||||||
|
* The compiler will try to instantiate an object of the type of std::optional<boost::serialization::U> which is not valid since U is not a type and
|
||||||
|
* thus leading to a whole series of errros.
|
||||||
|
*
|
||||||
|
* This is a well known bug in gcc documented here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84075
|
||||||
|
* A minimal reproducible example here: https://godbolt.org/z/anj9YjnPY
|
||||||
|
*
|
||||||
|
* For std::optional the workaround is just provide the traits needed to make std::optional<boost::serialization::U> possible
|
||||||
|
* This is not an issue since there is no actual type boost::serialization::U and we are not falsely providing a specialization
|
||||||
|
* for std::optional<boost::serialization::U>
|
||||||
|
*/
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#if __GNUC__ >= 7 && __cplusplus >= 201703L
|
#if __GNUC__ >= 7 && __cplusplus >= 201703L
|
||||||
namespace boost { namespace serialization { struct U; } }
|
namespace boost { namespace serialization { struct U; } }
|
||||||
|
@ -27,7 +45,6 @@ namespace std { template<> struct is_trivially_copy_constructible<boost::seriali
|
||||||
namespace std { template<> struct is_trivially_move_constructible<boost::serialization::U> : std::false_type {}; }
|
namespace std { template<> struct is_trivially_move_constructible<boost::serialization::U> : std::false_type {}; }
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
|
|
||||||
|
|
||||||
// function specializations must be defined in the appropriate
|
// function specializations must be defined in the appropriate
|
||||||
|
|
Loading…
Reference in New Issue