Open vladinator1000 opened 1 year ago
You need to also install Boost, Zug, and potentially Immer in practice. The best way to do that in the context of developing for Unreal on Windows and VisualStudio I'm not sure, as I don't really use Windows. Maybe some of the other Windows users around can help...
I made some progress and uploaded the code to https://github.com/vladinator1000/ue-static-third-party-library-example
Lager
module. The idea is to export Unreal-compatible stuff from this so that people can use lager in their games easily.Unfortunately this wouldn't compile with this error:
0>Counter.h(42): Error C4003 : not enough arguments for function-like macro invocation 'BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY'
0>Counter.h(42): Error C4003 : not enough arguments for function-like macro invocation 'BOOST_PP_SEQ_DETAIL_EMPTY_SIZE'
0>Counter.h(43): Error C4003 : not enough arguments for function-like macro invocation 'BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY'
0>Counter.h(43): Error C4003 : not enough arguments for function-like macro invocation 'BOOST_PP_SEQ_DETAIL_EMPTY_SIZE'
0>effect.hpp(127): Error C4003 : not enough arguments for function-like macro invocation 'check'
0>effect.hpp(127): Error C4003 : not enough arguments for function-like macro invocation 'UE_CHECK_IMPL'
0>effect.hpp(127): Error C2988 : unrecognizable template declaration/definition
0>effect.hpp(149): Reference C2988 : see reference to class template instantiation 'lager::result<Model,Action,Deps>' being compiled
0>effect.hpp(127): Error C2059 : syntax error: '<end Parse>'
0>effect.hpp(127): Error C2334 : unexpected token(s) preceding '{'; skipping apparent function body
0>effect.hpp(128): Error C2988 : unrecognizable template declaration/definition
0>effect.hpp(128): Error C2059 : syntax error: '{'
0>effect.hpp(128): Error C2334 : unexpected token(s) preceding '{'; skipping apparent function body
0>list.hpp(1336): Error C4003 : not enough arguments for function-like macro invocation 'check'
0>list.hpp(1336): Error C4003 : not enough arguments for function-like macro invocation 'UE_CHECK_IMPL'
0>list.hpp(1336): Error C2062 : type 'void' unexpected
0>list.hpp(1408): Reference C2062 : see reference to class template instantiation 'boost::intrusive::list_impl<ValueTraits,SizeType,ConstantTimeSize,HeaderHolder>' being compiled
0>list.hpp(1336): Error C2334 : unexpected token(s) preceding '{'; skipping apparent function body
0>list.hpp(1337): Error C4430 : missing type specifier - int assumed. Note: C++ does not support default-int
0>list.hpp(1337): Error C2059 : syntax error: '{'
0>list.hpp(1337): Error C2334 : unexpected token(s) preceding '{'; skipping apparent function body
0>xform_nodes.hpp(60): Error C4003 : not enough arguments for function-like macro invocation 'LAGER_THROW'
0>set.hpp(294): Error C2440 : '<function-style-cast>': cannot convert from 'initializer list' to 'boost::hana::detail::set_insert_if_contains<Ys>'
with
[
Ys=deps<Ds...>::required_key_set
]
0>set.hpp(294): Reference C2440 : The target type has no constructors
0>intersection.hpp(28): Reference C2440 : see reference to function template instantiation 'auto boost::hana::intersection_impl<boost::hana::set_tag,void>::apply<const boost::hana::set<>&,deps<Ds...>::required_key_set>(Xs,const Ys &)' being compiled
with
[
Xs=const boost::hana::set<> &,
Ys=deps<Ds...>::required_key_set
]
0>deps.hpp(345): Reference C2440 : see reference to function template instantiation 'auto boost::hana::intersection_t::operator ()<const boost::hana::set<>&,deps<Ds...>::required_key_set&>(Xs,Ys) const' being compiled
with
[
Xs=const boost::hana::set<> &,
Ys=deps<Ds...>::required_key_set &
]
0>store.hpp(359): Reference C2440 : see reference to class template instantiation 'lager::deps<>' being compiled
0>store.hpp(391): Reference C2440 : see reference to function template instantiation 'auto lager::make_store<Action,Tag,_Ty,lager::with_manual_event_loop,const lager::identity_t&>(Model &&,EventLoop &&,const lager::identity_t &)' being compiled
with
[
Action=counter::action,
Tag=lager::automatic_tag,
_Ty=counter::model,
Model=counter::model,
EventLoop=lager::with_manual_event_loop
]
0>Vod.cpp(16): Reference C2440 : see reference to function template instantiation 'auto lager::make_store<counter::action,lager::automatic_tag,counter::model,lager::with_manual_event_loop>(Model &&,EventLoop &&)' being compiled
with
[
Model=counter::model,
EventLoop=lager::with_manual_event_loop
]
0>partial.hpp(94): Error C3889 : call to object of class type 'boost::hana::detail::variadic::foldl1_t': no matching call operator found
0>foldl1.hpp(203): Reference C3889 : could be 'decltype(auto) boost::hana::detail::variadic::foldl1_t::operator ()(F &&,X1 &&,Xn &&...) const'
0>partial.hpp(94): Reference C3889 : 'decltype(auto) boost::hana::detail::variadic::foldl1_t::operator ()(F &&,X1 &&,Xn &&...) const': expects 3 arguments - 1 provided
0>tuple.hpp(229): Reference C3889 : see reference to function template instantiation 'decltype(auto) boost::hana::partial_t<std::integer_sequence<size_t,0>,boost::hana::detail::variadic::foldl1_t,boost::hana::set<>>::operator ()<>(void) &&' being compiled
0>unpack.hpp(47): Reference C3889 : see reference to function template instantiation 'decltype(auto) boost::hana::unpack_impl<boost::hana::tuple_tag,void>::apply<F>(const boost::hana::tuple<> &,F &&)' being compiled
with
[
F=boost::hana::partial_t<std::integer_sequence<size_t,0>,boost::hana::detail::variadic::foldl1_t,boost::hana::set<>>
]
0>set.hpp(151): Reference C3889 : see reference to function template instantiation 'decltype(auto) boost::hana::unpack_t::operator ()<const boost::hana::tuple<>&,F>(Xs,F &&) const' being compiled
with
[
F=boost::hana::partial_t<std::integer_sequence<size_t,0>,boost::hana::detail::variadic::foldl1_t,boost::hana::set<>>,
Xs=const boost::hana::tuple<> &
]
0>unpack.hpp(47): Reference C3889 : see reference to function template instantiation 'decltype(auto) boost::hana::unpack_impl<boost::hana::set_tag,void>::apply<const boost::hana::set<>&,F>(Set,F &&)' being compiled
with
[
F=boost::hana::partial_t<std::integer_sequence<size_t,0>,boost::hana::detail::variadic::foldl1_t,boost::hana::set<>>,
Set=const boost::hana::set<> &
]
0>fold_left.hpp(92): Reference C3889 : see reference to function template instantiation 'decltype(auto) boost::hana::unpack_t::operator ()<const boost::hana::set<>&,boost::hana::partial_t<std::integer_sequence<size_t,0>,boost::hana::detail::variadic::foldl1_t,boost::hana::set<>>>(Xs,F &&) const' being compiled
with
[
Xs=const boost::hana::set<> &,
F=boost::hana::partial_t<std::integer_sequence<size_t,0>,boost::hana::detail::variadic::foldl1_t,boost::hana::set<>>
]
0>fold_left.hpp(54): Reference C3889 : see reference to function template instantiation 'decltype(auto) boost::hana::fold_left_impl<T,boost::hana::when<true>>::apply<const boost::hana::set<>&,F>(Xs,F &&)' being compiled
with
[
T=boost::hana::set_tag,
F=boost::hana::set<>,
Xs=const boost::hana::set<> &
]
0>set.hpp(294): Reference C3889 : see reference to function template instantiation 'decltype(auto) boost::hana::fold_left_t::operator ()<const boost::hana::set<>&,boost::hana::set<>>(Xs,F &&) const' being compiled
with
[
Xs=const boost::hana::set<> &,
F=boost::hana::set<>
]
0>intersection.hpp(28): Error C2102 : '&' requires l-value
0>deps.hpp(342): Error C2676 : binary '==': 'const boost::hana::set<>' does not define this operator or a conversion to a type acceptable to the predefined operator
0>PimplPtr.h(307): Reference C2676 : could be 'bool operator ==(TYPE_OF_NULLPTR,const TPimplPtr<U,M> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(TYPE_OF_NULLPTR,const TPimplPtr<U,M> &)': could not deduce template argument for 'const TPimplPtr<U,M> &' from 'void'
0>RefCounting.h(348): Reference C2676 : or 'bool operator ==(ReferencedType *,const TRefCountPtr<ReferencedType> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(ReferencedType *,const TRefCountPtr<ReferencedType> &)': could not deduce template argument for 'ReferencedType *' from 'const boost::hana::set<>'
0>WeakObjectPtrTemplates.h(294): Reference C2676 : or 'bool operator ==(TYPE_OF_NULLPTR,const TWeakObjectPtr<T,TWeakObjectPtrBase> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(TYPE_OF_NULLPTR,const TWeakObjectPtr<T,TWeakObjectPtrBase> &)': could not deduce template argument for 'const TWeakObjectPtr<T,TWeakObjectPtrBase> &' from 'void'
0>WeakObjectPtrTemplates.h(288): Reference C2676 : or 'bool operator ==(const LhsT *,const TWeakObjectPtr<RhsT,OtherTWeakObjectPtrBase> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(const LhsT *,const TWeakObjectPtr<RhsT,OtherTWeakObjectPtrBase> &)': could not deduce template argument for 'const LhsT *' from 'const boost::hana::set<>'
0>SharedPointer.h(1993): Reference C2676 : or 'bool operator ==(TYPE_OF_NULLPTR,const TWeakPtr<ObjectType,InMode> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(TYPE_OF_NULLPTR,const TWeakPtr<ObjectType,InMode> &)': could not deduce template argument for 'const TWeakPtr<ObjectType,InMode> &' from 'void'
0>SharedPointer.h(1981): Reference C2676 : or 'bool operator ==(const TWeakPtr<ObjectType,InMode> &,TYPE_OF_NULLPTR)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(const TWeakPtr<ObjectType,InMode> &,TYPE_OF_NULLPTR)': could not deduce template argument for 'const TWeakPtr<ObjectType,InMode> &' from 'const boost::hana::set<>'
0>SharedPointer.h(1969): Reference C2676 : or 'bool operator ==(const TSharedPtr<ObjectTypeA,Mode> &,const TWeakPtr<ObjectTypeB,Mode> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(const TSharedPtr<ObjectTypeA,Mode> &,const TWeakPtr<ObjectTypeB,Mode> &)': could not deduce template argument for 'const TSharedPtr<ObjectTypeA,Mode> &' from 'const boost::hana::set<>'
0>SharedPointer.h(1957): Reference C2676 : or 'bool operator ==(const TSharedRef<CastToType,Mode> &,const TWeakPtr<ObjectTypeB,Mode> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(const TSharedRef<CastToType,Mode> &,const TWeakPtr<ObjectTypeB,Mode> &)': could not deduce template argument for 'const TSharedRef<CastToType,Mode> &' from 'const boost::hana::set<>'
0>SharedPointer.h(1945): Reference C2676 : or 'bool operator ==(const TWeakPtr<ObjectTypeA,Mode> &,const TSharedPtr<ObjectTypeB,Mode> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(const TWeakPtr<ObjectTypeA,Mode> &,const TSharedPtr<ObjectTypeB,Mode> &)': could not deduce template argument for 'const TWeakPtr<ObjectTypeA,Mode> &' from 'const boost::hana::set<>'
0>SharedPointer.h(1933): Reference C2676 : or 'bool operator ==(const TWeakPtr<ObjectTypeA,Mode> &,const TSharedRef<CastFromType,Mode> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(const TWeakPtr<ObjectTypeA,Mode> &,const TSharedRef<CastFromType,Mode> &)': could not deduce template argument for 'const TWeakPtr<ObjectTypeA,Mode> &' from 'const boost::hana::set<>'
0>SharedPointer.h(1921): Reference C2676 : or 'bool operator ==(const TWeakPtr<ObjectTypeA,Mode> &,const TWeakPtr<ObjectTypeB,Mode> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(const TWeakPtr<ObjectTypeA,Mode> &,const TWeakPtr<ObjectTypeB,Mode> &)': could not deduce template argument for 'const TWeakPtr<ObjectTypeA,Mode> &' from 'const boost::hana::set<>'
0>SharedPointer.h(1897): Reference C2676 : or 'bool operator ==(const TSharedPtr<ObjectTypeB,Mode> &,const TSharedRef<CastToType,Mode> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(const TSharedPtr<ObjectTypeB,Mode> &,const TSharedRef<CastToType,Mode> &)': could not deduce template argument for 'const TSharedPtr<ObjectTypeB,Mode> &' from 'const boost::hana::set<>'
0>SharedPointer.h(1873): Reference C2676 : or 'bool operator ==(const TSharedRef<CastToType,Mode> &,const TSharedPtr<ObjectTypeB,Mode> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(const TSharedRef<CastToType,Mode> &,const TSharedPtr<ObjectTypeB,Mode> &)': could not deduce template argument for 'const TSharedRef<CastToType,Mode> &' from 'const boost::hana::set<>'
0>SharedPointer.h(1825): Reference C2676 : or 'bool operator ==(TYPE_OF_NULLPTR,const TSharedPtr<ObjectType,InMode> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(TYPE_OF_NULLPTR,const TSharedPtr<ObjectType,InMode> &)': could not deduce template argument for 'const TSharedPtr<ObjectType,InMode> &' from 'void'
0>SharedPointer.h(1813): Reference C2676 : or 'bool operator ==(const TSharedPtr<ObjectType,InMode> &,TYPE_OF_NULLPTR)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(const TSharedPtr<ObjectType,InMode> &,TYPE_OF_NULLPTR)': could not deduce template argument for 'const TSharedPtr<ObjectType,InMode> &' from 'const boost::hana::set<>'
0>SharedPointer.h(1801): Reference C2676 : or 'bool operator ==(const TSharedPtr<ObjectTypeA,Mode> &,const TSharedPtr<ObjectTypeB,Mode> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(const TSharedPtr<ObjectTypeA,Mode> &,const TSharedPtr<ObjectTypeB,Mode> &)': could not deduce template argument for 'const TSharedPtr<ObjectTypeA,Mode> &' from 'const boost::hana::set<>'
0>SharedPointer.h(1777): Reference C2676 : or 'bool operator ==(const TSharedRef<CastToType,Mode> &,const TSharedRef<CastFromType,Mode> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(const TSharedRef<CastToType,Mode> &,const TSharedRef<CastFromType,Mode> &)': could not deduce template argument for 'const TSharedRef<CastToType,Mode> &' from 'const boost::hana::set<>'
0>ArrayView.h(816): Reference C2676 : or 'bool operator ==(TArrayView<ElementType,int32>,RangeType &&)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(TArrayView<ElementType,int32>,RangeType &&)': could not deduce template argument for 'TArrayView<ElementType,int32>' from 'const boost::hana::set<>'
0>ArrayView.h(805): Reference C2676 : or 'bool operator ==(RangeType &&,TArrayView<ElementType,int32>)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(RangeType &&,TArrayView<ElementType,int32>)': could not deduce template argument for 'TArrayView<ElementType,int32>' from 'void'
0>ArrayView.h(790): Reference C2676 : or 'bool operator ==(TArrayView<InElementType,InSizeType>,TArrayView<OtherElementType,OtherSizeType>)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(TArrayView<InElementType,InSizeType>,TArrayView<OtherElementType,OtherSizeType>)': could not deduce template argument for 'TArrayView<InElementType,InSizeType>' from 'const boost::hana::set<>'
0>UniquePtr.h(767): Reference C2676 : or 'bool operator ==(TYPE_OF_NULLPTR,const TUniquePtr<T,TDefaultDelete<T>> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(TYPE_OF_NULLPTR,const TUniquePtr<T,TDefaultDelete<T>> &)': could not deduce template argument for 'const TUniquePtr<T,TDefaultDelete<T>> &' from 'void'
0>Function.h(1045): Reference C2676 : or 'bool operator ==(TYPE_OF_NULLPTR,const TFunction<T> &)'
0>deps.hpp(342): Reference C2676 : 'bool operator ==(TYPE_OF_NULLPTR,const TFunction<T> &)': could not deduce template argument for 'const TFunction<T> &' from 'void'
0>comparable.hpp(36): Reference C2676 : or 'auto boost::hana::detail::operators::operator ==(X &&,Y &&)'
0>deps.hpp(345): Reference C2676 : 'auto boost::hana::detail::operators::operator ==(X &&,Y &&)': could not deduce template argument for '<unnamed-symbol>'
0>array.hpp(95): Reference C2676 : or 'bool boost::hana::detail::operator ==(boost::hana::detail::array<T,Size>,boost::hana::detail::array<U,N>)'
0>deps.hpp(342): Reference C2676 : 'bool boost::hana::detail::operator ==(boost::hana::detail::array<T,Size>,boost::hana::detail::array<U,N>)': could not deduce template argument for 'boost::hana::detail::array<T,Size>' from 'const boost::hana::set<>'
0>deps.hpp(363): Error C3889 : call to object of class type 'boost::hana::intersection_t': no matching call operator found
0>intersection.hpp(26): Reference C3889 : could be 'auto boost::hana::intersection_t::operator ()(Xs &&,Ys &&) const'
0>deps.hpp(363): Reference C3889 : Failed to specialize function template 'auto boost::hana::intersection_t::operator ()(Xs &&,Ys &&) const'
0>deps.hpp(363): Reference C3889 : With the following template arguments:
0>deps.hpp(363): Reference C3889 : 'Xs=const boost::hana::set<> &'
0>deps.hpp(363): Reference C3889 : 'Ys=void'
0>store.hpp(40): Error C3200 : 'lager::detail::reader_node<T>': invalid template argument for template parameter 'Base', expected a class template
with
[
T=model_t
]
[5/5] WriteMetadata LibEditor.target cancelled
I'm not sure what I did wrong here, my current theories are:
Counter.h
that I have the wrong boost/preprocessor
versioneffect.hpp
the syntax errors make me think that I'm compiling with the wrong C++ version. The Unreal docs say they compile with C++ 20 currently.Something makes me think that UE and boost are fundamentally incompatible.
The real issue I believe to be MSVC -- there are several other threads here where we have been fighting with MSVC see https://github.com/arximboldi/lager/issues/126
Some users have been migrating to using clang under MSVC, but I don't know if that is supported by Unreal.
If you are using vcpkg, lager is provided and will resolve all dependencies for you
Hi folks, I'm a C++ noob, I was impressed by the library because I'm familiar with the pattern from web development. I also love making games in Unreal Engine and was hoping to use Lager, but I'm having trouble including the library.
Created an unreal module following these instructions: https://youtu.be/wJquw_-X4YQ
Cloned Lager within my project
Included something from Lager
It wouldn't build because of a missing dependency
Went to the readme to look for install instructions, looks like they were for linux so I had to improvise
Navigated to the cloned Lager root directory and ran
Do you have any tips on how I can make this work?