Thank you very much for your answer.
It turns out that the main culprit was that both sol2 and UE4 have their own macros for “check”, which i fixed by undefining and redefining UE4s check before/after i included sol2s hpp
#undef check
#include "sol.hpp"
#define check(expr) { if(UNLIKELY(!(expr))) { Debug::LogAssertFailedMessage( #expr, __FILE__, __LINE__ ); DebugBreakAndPromptForRemote(); FDebug::AssertFailed( #expr, __FILE__, _LINE__ ); CA_ASSUME(false); } }
This seems to get rid of the errors, however two new errors orrcur:
That gets rid of all the errors, only a few new errors are thrown:
2>\sol2\Includes\sol.hpp(1028):` error C4583: 'sol::storage_t<T>::value_': destructor is not implicitly called
and
2>\sol2\Includes\sol.hpp(1028): error C4583: 'sol::storage_t<T>::value_': destructor is not implicitly called
All these two constructor/destructor errors get thrown by this template in sol.hpp:
template <class T>
union storage_t
{
unsigned char dummy_;
T value_;
constexpr storage_t( trivial_init_t ) noexcept : dummy_() {};
template <class... Args>
constexpr storage_t( Args&&... args ) : value_(constexpr_forward<Args>(args)...) {}
~storage_t(){}
};
Does UE4 have any special convention for using constructors/destructors in third party code? Because again, with any other game project i’ve worked on sol2 worked, so i guess it must be some UE4 quirk.