diff --git a/src/main/java/com/eprosima/fastcdr/idl/templates/TypesHeader.stg b/src/main/java/com/eprosima/fastcdr/idl/templates/TypesHeader.stg index d3b83b03..5e12f21a 100644 --- a/src/main/java/com/eprosima/fastcdr/idl/templates/TypesHeader.stg +++ b/src/main/java/com/eprosima/fastcdr/idl/templates/TypesHeader.stg @@ -296,9 +296,23 @@ public: eProsima_user_DllExport $union.name$() { $if(union.defaultAnnotatedMember)$ - $union.defaultAnnotatedMember.name$_(); + selected_member_ = $union.defaultAnnotatedMember.id$; + $if(union.defaultAnnotatedMember.typecode.primitive)$ + member_destructor_ = nullptr; + m_$union.defaultAnnotatedMember.name$ = $member_default_init(union.defaultAnnotatedMember)$; + $else$ + member_destructor_ = [&]() {$union_member_destroy_call(union.defaultAnnotatedMember)$\}; + new(&m_$union.defaultAnnotatedMember.name$) $member_type_declaration(union.defaultAnnotatedMember)$(); + $endif$; $elseif(union.defaultMember)$ - $union.defaultMember.name$_(); + selected_member_ = $union.defaultMember.id$; + $if(union.defaultMember.typecode.primitive)$ + member_destructor_ = nullptr; + m_$union.defaultMember.name$ = $member_default_init(union.defaultMember)$; + $else$ + member_destructor_ = [&]() {$union_member_destroy_call(union.defaultMember)$\}; + new(&m_$union.defaultMember.name$) $member_type_declaration(union.defaultMember)$(); + $endif$; $endif$ }