thread_local auto const neolib_PartialResult_##VariableName = \
neolib::service<neolib::i_shared_thread_local>().allocate_or_get<VariableType>( \
(std::string{
typeid(ClassType).name() } +
"::" STRING(VariableScope)
"::" STRING(VariableName)).c_str(), \
[](void* aMemory) { using neolib_VariableTypeAlias = VariableType; static_cast<VariableType*>(aMemory)->~neolib_VariableTypeAlias(); }); \
auto const& neolib_CapturablePartialResult_##VariableName = neolib_PartialResult_##VariableName; \
thread_local auto& VariableName = [&neolib_CapturablePartialResult_##VariableName]() -> VariableType& \
{ \
if (neolib_CapturablePartialResult_##VariableName.initializationRequired) \
{ \
new (static_cast<VariableType*>(neolib_CapturablePartialResult_##VariableName.memory)) VariableType{ InitialValue }; \
} \
return *static_cast<VariableType*>(neolib_CapturablePartialResult_##VariableName.memory); \
}();