This is with Visual Studio 2017.
I'm trying to register a quite large usertype to the sol2 state (only variables, no functions), the compiler throws Error C4503 : "decorated name length exceeded, name was truncated" and won't finish the compiling process.
This happens regardless whether i use usertype or simple_userype
Adding #pragma warning( disable : 4503 ) surpresses these errors and allows the compilation to finish and it seems to work perfectly fine and without performance issues.
According to this
https://msdn.microsoft.com/en-us/library/074af4b6.aspx
a programs correctness is unaffected by it (debugging can become harder), however i just want to make sure if this kind of error is truly harmless and an be ignored/surpressed without having to worry about negative consequences in the validity of the registered object from luas point of view?
If it is harmless then i'd suggest adding a hint in the documentation for the usertype , something like "if registering a large usertype causes a compilation warning C4503 : This error is harmless. Just add "#pragma warning( disable : 4503 )" at the top of your code document to surpress this error."
If it is important, this is the kind of usertype i'm trying to register (about 60 member variables and no functions.. i cut it out and renamed some for the sake of simplicity)
this->LuaState.new_simple_usertype<UStatsComponent>(
"StatsComponent",
"UniqueID", &UStatsComponent::UniqueID,
"Level", &UStatsComponent::Level,
"Name", &UStatsComponent::Name,
"SomeAttribute1", &UStatsComponent::SomeAttribute1,
"SomeAttribute2", &UStatsComponent::SomeAttribute2,
...
"SomeAttribute60", &UStatsComponent::SomeAttribute60
);
And this is the kind of error i'm getting if i don't surpress the error:
1>G:\dev\Unreal Projects\Ragnarok\Source\Ragnarok\GameModeLua.cpp(701): error C4503: 'std::forward_as_tuple': decorated name length exceeded, name was truncated
1>G:\dev\Unreal Projects\Ragnarok\Source\Ragnarok\GameModeLua.cpp(701): error C4503: 'sol::simple_usertype_metatable<T>::simple_usertype_metatable': decorated name length exceeded, name was truncated
1> with
1> [
1> T=UStatsComponent
1> ]
1>G:\dev\Unreal Projects\Ragnarok\Source\Ragnarok\GameModeLua.cpp(701): error C4503: 'std::tuple<const char (&)[9],_Ty &&,const char (&)[6],_Ty &&,const char (&)[5],FString UStatsComponent::* &&,const char (&)[16],_Ty &&,const char (&)[12],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[11],float UStatsComponent::* &&,const char (&)[18],float UStatsComponent::* &&,const char (&)[15],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[16],float UStatsComponent::* &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[5],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[5],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[11],_Ty &&,const char (&)[7],_Ty &&,const char (&)[7],_Ty &&,const char (&)[8],_Ty &&,const char (&)[8],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[8],EDefElement UStatsComponent::* &&,const char (&)[5],ERace UStatsComponent::* &&,const char (&)[5],ESize UStatsComponent::* &&,const char (&)[10],_Ty &&,const char (&)[14],_Ty &&,const char (&)[13],_Ty &&,const char (&)[5],float UStatsComponent::* &&,const char (&)[9],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[6],_Ty &&,const char (&)[10],_Ty &&,const char (&)[7],_Ty &&,const char (&)[10],_Ty &&,const char (&)[10],_Ty &&,const char (&)[8],_Ty &&,const char (&)[7],_Ty &&,const char (&)[4],_Ty &&,const char (&)[8],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[15],_Ty &&,const char (&)[15],_Ty &&,const char (&)[5],_Ty &&,const char (&)[9],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[9],_Ty &&,const char (&)[16],_Ty &&,const char (&)[16],_Ty &&,const char (&)[23],float UStatsComponent::* &&,const char (&)[27],float UStatsComponent::* &&,const char (&)[30],float UStatsComponent::* &&,const char (&)[5],const sol::destructor_wrapper<void> &>::tuple': decorated name length exceeded, name was truncated
1> with
1> [
1> _Ty=int32 UStatsComponent::*
1> ]
1>G:\dev\Unreal Projects\Ragnarok\Source\Ragnarok\GameModeLua.cpp(701): error C4503: 'std::tuple<_Ty &&,const char (&)[6],_Ty &&,const char (&)[5],FString UStatsComponent::* &&,const char (&)[16],_Ty &&,const char (&)[12],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[11],float UStatsComponent::* &&,const char (&)[18],float UStatsComponent::* &&,const char (&)[15],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[16],float UStatsComponent::* &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[5],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[5],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[11],_Ty &&,const char (&)[7],_Ty &&,const char (&)[7],_Ty &&,const char (&)[8],_Ty &&,const char (&)[8],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[8],EDefElement UStatsComponent::* &&,const char (&)[5],ERace UStatsComponent::* &&,const char (&)[5],ESize UStatsComponent::* &&,const char (&)[10],_Ty &&,const char (&)[14],_Ty &&,const char (&)[13],_Ty &&,const char (&)[5],float UStatsComponent::* &&,const char (&)[9],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[6],_Ty &&,const char (&)[10],_Ty &&,const char (&)[7],_Ty &&,const char (&)[10],_Ty &&,const char (&)[10],_Ty &&,const char (&)[8],_Ty &&,const char (&)[7],_Ty &&,const char (&)[4],_Ty &&,const char (&)[8],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[15],_Ty &&,const char (&)[15],_Ty &&,const char (&)[5],_Ty &&,const char (&)[9],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[9],_Ty &&,const char (&)[16],_Ty &&,const char (&)[16],_Ty &&,const char (&)[23],float UStatsComponent::* &&,const char (&)[27],float UStatsComponent::* &&,const char (&)[30],float UStatsComponent::* &&,const char (&)[5],const sol::destructor_wrapper<void> &>::tuple': decorated name length exceeded, name was truncated
1> with
1> [
1> _Ty=int32 UStatsComponent::*
1> ]
1>G:\dev\Unreal Projects\Ragnarok\Source\Ragnarok\GameModeLua.cpp(701): error C4503: 'std::tuple<const char (&)[6],_Ty &&,const char (&)[5],FString UStatsComponent::* &&,const char (&)[16],_Ty &&,const char (&)[12],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[11],float UStatsComponent::* &&,const char (&)[18],float UStatsComponent::* &&,const char (&)[15],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[16],float UStatsComponent::* &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[5],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[5],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[11],_Ty &&,const char (&)[7],_Ty &&,const char (&)[7],_Ty &&,const char (&)[8],_Ty &&,const char (&)[8],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[8],EDefElement UStatsComponent::* &&,const char (&)[5],ERace UStatsComponent::* &&,const char (&)[5],ESize UStatsComponent::* &&,const char (&)[10],_Ty &&,const char (&)[14],_Ty &&,const char (&)[13],_Ty &&,const char (&)[5],float UStatsComponent::* &&,const char (&)[9],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[6],_Ty &&,const char (&)[10],_Ty &&,const char (&)[7],_Ty &&,const char (&)[10],_Ty &&,const char (&)[10],_Ty &&,const char (&)[8],_Ty &&,const char (&)[7],_Ty &&,const char (&)[4],_Ty &&,const char (&)[8],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[15],_Ty &&,const char (&)[15],_Ty &&,const char (&)[5],_Ty &&,const char (&)[9],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[9],_Ty &&,const char (&)[16],_Ty &&,const char (&)[16],_Ty &&,const char (&)[23],float UStatsComponent::* &&,const char (&)[27],float UStatsComponent::* &&,const char (&)[30],float UStatsComponent::* &&,const char (&)[5],const sol::destructor_wrapper<void> &>::tuple': decorated name length exceeded, name was truncated
1> with
1> [
1> _Ty=int32 UStatsComponent::*
1> ]
1>G:\dev\Unreal Projects\Ragnarok\Source\Ragnarok\GameModeLua.cpp(701): error C4503: 'std::tuple<_Ty &&,const char (&)[5],FString UStatsComponent::* &&,const char (&)[16],_Ty &&,const char (&)[12],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[11],float UStatsComponent::* &&,const char (&)[18],float UStatsComponent::* &&,const char (&)[15],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[16],float UStatsComponent::* &&,const char (&)[4],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[5],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[5],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[11],_Ty &&,const char (&)[7],_Ty &&,const char (&)[7],_Ty &&,const char (&)[8],_Ty &&,const char (&)[8],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[8],EDefElement UStatsComponent::* &&,const char (&)[5],ERace UStatsComponent::* &&,const char (&)[5],ESize UStatsComponent::* &&,const char (&)[10],_Ty &&,const char (&)[14],_Ty &&,const char (&)[13],_Ty &&,const char (&)[5],float UStatsComponent::* &&,const char (&)[9],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[6],_Ty &&,const char (&)[10],_Ty &&,const char (&)[7],_Ty &&,const char (&)[10],_Ty &&,const char (&)[10],_Ty &&,const char (&)[8],_Ty &&,const char (&)[7],_Ty &&,const char (&)[4],_Ty &&,const char (&)[8],_Ty &&,const char (&)[11],_Ty &&,const char (&)[11],_Ty &&,const char (&)[8],_Ty &&,const char (&)[15],_Ty &&,const char (&)[15],_Ty &&,const char (&)[5],_Ty &&,const char (&)[9],_Ty &&,const char (&)[12],_Ty &&,const char (&)[12],_Ty &&,const char (&)[9],_Ty &&,const char (&)[16],_Ty &&,const char (&)[16],_Ty &&,const char (&)[23],float UStatsComponent::* &&,const char (&)[27],float UStatsComponent::* &&,const char (&)[30],float UStatsComponent::* &&,const char (&)[5],const sol::destructor_wrapper<void> &>::tuple': decorated name length exceeded, name was truncated
1> with
1> [
1> _Ty=int32 UStatsComponent::*
1> ]
1>G:\dev\Unreal Projects\Ragnarok\Source\Ragnarok\GameModeLua.cpp(701): error C4503: 'std::tuple<const char (&)[5],_Ty &&,const char (&)[16],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[11],float UStatsComponent::* &&,const char (&)[18],float UStatsComponent::* &&,const char (&)[15],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[16],float UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[5],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[5],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[7],int UStatsComponent::* &&,const char (&)[7],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[8],EDefElement UStatsComponent::* &&,const char (&)[5],ERace UStatsComponent::* &&,const char (&)[5],ESize UStatsComponent::* &&,const char (&)[10],int UStatsComponent::* &&,const char (&)[14],int UStatsComponent::* &&,const char (&)[13],int UStatsComponent::* &&,const char (&)[5],float UStatsComponent::* &&,const char (&)[9],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[6],int UStatsComponent::* &&,const char (&)[10],int UStatsComponent::* &&,const char (&)[7],int UStatsComponent::* &&,const char (&)[10],int UStatsComponent::* &&,const char (&)[10],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[7],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[15],int UStatsComponent::* &&,const char (&)[15],int UStatsComponent::* &&,const char (&)[5],int UStatsComponent::* &&,const char (&)[9],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[9],int UStatsComponent::* &&,const char (&)[16],int UStatsComponent::* &&,const char (&)[16],int UStatsComponent::* &&,const char (&)[23],float UStatsComponent::* &&,const char (&)[27],float UStatsComponent::* &&,const char (&)[30],float UStatsComponent::* &&,const char (&)[5],const sol::destructor_wrapper<void> &>::tuple': decorated name length exceeded, name was truncated
1> with
1> [
1> _Ty=FString UStatsComponent::*
1> ]
1>G:\dev\Unreal Projects\Ragnarok\Source\Ragnarok\GameModeLua.cpp(701): error C4503: 'std::tuple<_Ty &&,const char (&)[16],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[11],float UStatsComponent::* &&,const char (&)[18],float UStatsComponent::* &&,const char (&)[15],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[16],float UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[5],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[5],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[7],int UStatsComponent::* &&,const char (&)[7],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[8],EDefElement UStatsComponent::* &&,const char (&)[5],ERace UStatsComponent::* &&,const char (&)[5],ESize UStatsComponent::* &&,const char (&)[10],int UStatsComponent::* &&,const char (&)[14],int UStatsComponent::* &&,const char (&)[13],int UStatsComponent::* &&,const char (&)[5],float UStatsComponent::* &&,const char (&)[9],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[12],float UStatsComponent::* &&,const char (&)[6],int UStatsComponent::* &&,const char (&)[10],int UStatsComponent::* &&,const char (&)[7],int UStatsComponent::* &&,const char (&)[10],int UStatsComponent::* &&,const char (&)[10],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[7],int UStatsComponent::* &&,const char (&)[4],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[11],int UStatsComponent::* &&,const char (&)[8],int UStatsComponent::* &&,const char (&)[15],int UStatsComponent::* &&,const char (&)[15],int UStatsComponent::* &&,const char (&)[5],int UStatsComponent::* &&,const char (&)[9],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[12],int UStatsComponent::* &&,const char (&)[9],int UStatsComponent::* &&,const char (&)[16],int UStatsComponent::* &&,const char (&)[16],int UStatsComponent::* &&,const char (&)[23],float UStatsComponent::* &&,const char (&)[27],float UStatsComponent::* &&,const char (&)[30],float UStatsComponent::* &&,const char (&)[5],const sol::destructor_wrapper<void> &>::tuple': decorated name length exceeded, name was truncated
1> with
1> [
1> _Ty=FString UStatsComponent::*
1> ]
Unfortunately this is a compiler limitation and there's nothing sol2 can do about it until reflection becomes a thing in C++, when you won't even have to explicitly define your members (so probably sometime in the next 10 years). For now, you can use this registration syntax to work around this issue:
auto statsUsertype = LuaState.create_simple_usertype<UStatsComponent>();
statsUsertype.set("UniqueID", &UStatsComponent::UniqueID);
statsUsertype.set("Level", &UStatsComponent::Level);
statsUsertype.set("Name", &UStatsComponent::Name);
statsUsertype.set("SomeAttribute1", &UStatsComponent::SomeAttribute1);
statsUsertype.set("SomeAttribute2", &UStatsComponent::SomeAttribute2);
...
statsUsertype.set("SomeAttribute40", &UStatsComponent::SomeAttribute40);
LuaState.set_usertype("StatsComponent", statsUsertype);
I should note that the only side-effect of the issue you're experiencing is incomplete debug symbols, however if you keep adding members you will reach a point where your program will not compile at all.
Yea,i wasn't really expecting a "fix" from sol2s side, i was just wondering if this "decorated name length exceeded" error could cause some trouble with c++ >< lua communication or lua usertype creation, but if it's just affecting c++ debug symbols then i don't mind blocking the error via macro.
Thank you very much for your suggestion how to work around it. I'll try it right away. :)
Edit : it always amazes me again how many alternatives Sol2 provides for doing the same task (creating usertypes, accessing tables, doing functions, etc). I love it and am so happy Sol2 exists ^_^.
What @OrfeasZ said is pretty much correct. simple_usertype and set will somewhat allow you to get around compiler limitations. The performance loss is essentially minimal at that point and so both exist solely to cater to either having a small registration list for maximum speed or a large registration list that can take some (very tiny) performance hits for its structure.
I tried to put some of those warnings around the sol2 headers, but it didn't propogate to instantiaions people were doing in their code. It's purely a debug warning and I could probably add a small note to the errors page in the docs, but... I'm tired at the moment. Hopefully I'll remember after this week is over...