Extensible and Dynamic Topic Types for DDS Avatar
  1. OMG Specification

Extensible and Dynamic Topic Types for DDS — Closed Issues

  • Acronym: DDS-XTypes
  • Issues Count: 97
  • Description: Issues resolved by a task force and approved by Board
Closed All
Issues resolved by a task force and approved by Board

Issues Summary

Key Issue Reported Fixed Disposition Status
DDSXTY14-190 Update Conformance Profiles DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-80 Clarify behavior of @range and @unit with respect to type compatibility DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-36 Representing union case labels in TypeObject DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-193 TypeObject serialization needs additonal contraints DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-180 Refine issue resolutions DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Closed; No Change closed
DDSXTY14-179 Enum literals sign DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-181 @doc annotation should not default the "value" parameter DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-187 Deprecate XSD Type representation DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-28 IDL's fixed data type is required in XTypes DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-182 Add mechanism to determine serialization detail/variations DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-107 Assignability rules for unions are brittle and restrictive DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-87 Serialized size not defined for SCCIdentifier DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-24 TypeFlags usage in normative IDL DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-164 Remove duplicate information from section 7.3.1 IDL Type Representation DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-5 Consider referencing DDS-XML for the XML type and data representations DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-142 Allow documentation and licensing to be associated with types DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-38 Data Representation for RTPS's Serialized Key DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-72 XCDR2 serialization of non-trivial maps DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-46 Typo in Member of AnnotationParameterValue, etc. DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-97 Appending to an appendable struct can break XCDR1 deserialization DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-40 Type Consistency Enforcement QoS Policy ignore_member_names DDS-XTypes 1.3 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-41 Unknown behavior of explicitly negated key in nested struct DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-114 Remove misleading sentence from 7.6.3.4.1 TypeConsistencyEnforcementQosPolicy: Conceptual Model DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-116 Add support for specifying the domainTag DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Closed; Out Of Scope closed
DDSXTY14-16 Section 7.3.1.2.1.11 @ignore_literal_names is unclear DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-95 Union members cannot be optional but serialization allows for it DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-98 Add missing type definitions DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Closed; Out Of Scope closed
DDSXTY14-104 Clarify how "must_understand" and "optional" members are designated DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-96 Discriminator default semantics are unclear DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-74 Clarify the intended member ID of a union's discriminator DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-88 Correct comment in Annex B struct MinimalStructMember DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-85 Fix namins/inconsistencies in machine readable files dds-xml_application_example.xml DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-68 Update IDL definition of union TypeIdentifier in Annex B to account for primitive types DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-66 Conflicting Order of Minimal Struct and Union Members in TypeObject DDS-XTypes 1.3 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-60 Table 9 is missing BITMASK_TYPE DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-52 Missing TK_INT8 and TK_UINT8 in the IDL machine readable file DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-54 Impossible to handle @must_understand AND @optional fields in an @appendable struct correctly DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-33 Enums with different holder types should not be assignable DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-42 Table 60 - RTPS encapsulation identifier DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-45 The list of valid KEY types does not include String types DDS-XTypes 1.3 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-35 Anonymous Types in Strongly Connected Components DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-48 8 bit types, enumerated types, and union inheritance missing in 7.2.1 DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-20 Inconsistent Definitions of RTPS Encapsulation DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-11 Clarify whether the algorithm to compute KeyHash is specific to XTYPES DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-10 Missing parameter in Annex C operation DynamicDataFactory::create_data DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-29 Specify that TypeLookup Service uses XCDR2 DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-25 7.4.3.5.3 contradictory rules for collections DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-23 Missing alignment for XCDR1 mutable's sentinel DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-27 DataRepresentationQosPolicy default DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-84 Make the format of annotation parameters more robust DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-6 Extra fields in IDL of 7.8.2.1 create_client DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Closed; Out Of Scope closed
DDSXTY14-8 Extra text left in section 7.2.2.4.4.4.4 Member IDs DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-4 Wrong name for DataRepresentationQosPolicy field DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-1 Add Unions to types supported in Queries and Filters DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-90 Bad reference to RTPS leads to apparent circularity DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-83 Wrong type name used: VehiclePositionType DDS-XTypes 1.3 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-82 Support optional for union members, add exception DDS-XTypes 1.3 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-79 Typo fixes DDS-XTypes 1.3 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-81 Inconsistent specification of where annotations can apply DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-78 Misspellings of "aggregated" DDS-XTypes 1.3 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-108 Confusing classification of Annotations DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-49 Remove all IDL42 specified parts DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-174 Must Undestand rules are not working well with appendable types DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-131 Update Section 6.1 and 7.2.1 DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-76 Does @try_contruct(TRIM) leave strings with valid UTF-8 and UTF-16? DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-77 Inheritance rule regarding keys is overly restrictive DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-67 Typos in DynamicData UML Diagrams DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-69 Section contains a duplicate sentence from the next section. DDS-XTypes 1.3 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-73 Ambiguous definition and/or usage of PUSH(ORIGIN=0) DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-59 Clarify accessing discriminator of a DynamicData union DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-65 Typo in DataRepresentationMask DDS-XTypes 1.3 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-57 Annex C: BoundSeq IDL type not defined DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-50 Integrate annotations for range/min/max with try_construct DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-64 Should the TypeObject mark key members as must understand DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-53 Description on how to encode Participant GUID in dds::rpc::RequestHeader seems wrong DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-51 Extensibility of inherited structures DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-47 Encoding of TypeInformation in SEDP DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-18 7.4.3.5.3 doesn't define OPTIONS DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-44 Default value and @default annotations DDS-XTypes 1.3 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-21 Can structures contain constant declarations? DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-26 XTypes spec is missing topic names for TypeLookupService DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-19 Confusing description of FINAL on 7.2.3 TypeExtensibilityandMutability DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-39 TypeLookup IDL Inconsistency DDS-XTypes 1.3 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-37 Ambiguous effect of using annotations on attributes with multiple declarators. DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-12 Need to add an ignore_enum_literal_names in TypeConsistencyEnforcement QosPolicy DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-13 Be more precise on meaning of string lengths and bounds DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-14 Define Implied Keys Behavior DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-15 Implementation Defined Default Nested Behavior DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-2 Specify more clearly which types have a name and how it is constructed DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Resolved closed
DDSXTY14-17 Typo or editing issue DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Duplicate or Merged closed
DDSXTY14-56 XCDR2 serialization of sequences of non-primitive elements DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Deferred closed
DDSXTY14-61 DynamicTypeSupport IDL defnition is invalid IDL DDS-XTypes 1.3 DDS-XTypes 1.4b1 Deferred closed
DDSXTY14-55 Add support for data-level compression during serialization DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Deferred closed
DDSXTY14-58 Dynamic Binding: equals() for DynamicType/DynamicTypeMember and related types DDS-XTypes 1.3 DDS-XTypes 1.4b1 Deferred closed
DDSXTY14-75 create_sample can't indicate failure DDS-XTypes 1.3 DDS-XTypes 1.4b1 Deferred closed
DDSXTY14-63 bitset types not defined DDS-XTypes 1.3b1 DDS-XTypes 1.4b1 Deferred closed
DDSXTY14-111 Add API for truely dynamically-typed Data Readers DDS-XTypes 1.3 DDS-XTypes 1.4b1 Deferred closed

Issues Descriptions


Clarify behavior of @range and @unit with respect to type compatibility

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification does not state clearly if a writer and and reader that have types with incompatible values of @unit or @range should match?

    Also it is not clear as if both a complete TypeObject and a minimal TypeObject should be sent or just one and how it is decided.

    It would seem like.a good idea to allow application (DataReaders) to opt in or out of matching writers that have types with incompatible @range and/or @unit. If so mechanisms should be provided to configure this and make sure the complete TypeIdentifier is propagated in those cases as the corresponding TypeObject is the only one that has the information of @range and @unit.

  • Reported: DDS-XTypes 1.3b1 — Wed, 11 Sep 2024 15:37 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Consider units and ranges as part of type assignability

    Include them in TypeObjectMinimal (and TypeObjectComplete)
    Take them into account for type assignability.

    Ranges
    If the range of T1 and T2 writer have a non-empty intersection, then the types are assignable. Specific data samples outside the range will be handled per the @try_construct rules
    Otherwise the types are not assignable

    The TypeObjectMinimal and TypeObjectComplete will are extended so optionally include the limits. If the limits are not present they are understood to be no limits.

    Units
    Add them to the TypeObjectComplete and the TypeObjectMinimal.

    Consider them as part of the type Assignability. The value of the units is string. The value is trimmed removing the spaces. The string can contain one or more unit-name substrings separated by ";" (e.g. @unit("m / s; meter/s"). Unit names are compared pairwise. If there are any matches then the units are 'assignable'.

    The comparison is case-sensitive.

    Wildcards are not allowed.

    If one side specifies units and the other side doesn't then assignability depends on the setting of the (new) TypeConsistencyEnforcementQosPolicy attribute ignore_units.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Representing union case labels in TypeObject

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    TypeObject assumes that all union case labels are representable in a 32-bit integer:

    // Case labels that apply to a member of a union type
    // Ordered by their values
    typedef sequence<long> UnionCaseLabelSeq;
    

    Both IDL 4.2 and the general type system in XTypes (Figure 18, 7.2.2.4.4.3) allow 64-bit integer types as discriminators and therefore 64-bit values as case labels.

  • Reported: DDS-XTypes 1.3 — Tue, 29 Sep 2020 17:46 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Add support for unions with 64-bit discriminant to TypeObject

    Add new Type Kind TK_UNION64 with associated CompleteUnion64Type and MinimalUnion64Type. These are defined the same as CompleteUnionType and MinimalUnion64Type, except that the discriminator labels are 64-bit integers instead of 32-bit integers.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

TypeObject serialization needs additonal contraints

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.3.3.6 TypeObject serialization specifies constraints in the serialization of TypeObject such that "the serialized result is bitwise identical independently of the vendor or platform where the serialization occurs."

    However the list of constraints is not sufficient to guarantee identical serialization due to potential padding. An additional constraint should be added to specify that padding bytes should be set to zero

  • Reported: DDS-XTypes 1.3b1 — Tue, 13 Jan 2026 20:00 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    *Extend 7.3.3.6 "TypeObject serialization" constraints*

    in 7.3.3.6 "TypeObject serialization" specify padding bytes should be set to zero.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Refine issue resolutions

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Issue DDSXTY14-41 adds some logic on how to handle Key members where the member type is unkeyed.

    It says that nested members that are arrays/maps/sequences are not considered part of the container's key

    It says optional and must_unsertand=false are considered part of the container key type.

    We should revise this to make sure it is more consistent with what the @key annotation allows and also match what vendors are doing.

    On DDSXTY14-94. Modify the resolution per the comment:
    Replace "The for the Dynamic Language Binding" with "The Dynamic Language Binding"

    On DDSXTY14-23 modify resolution per (2025-08-26) comment in resolution (DDSXTY14-103)

    On DDSXTY14-1, update '#' character per comment in DDSXTY14-122

    On DDSXTY14-97 upate to mention rule apples to aggregate types per comment in DDSXTY14-167

  • Reported: DDS-XTypes 1.3b1 — Mon, 8 Dec 2025 23:22 GMT
  • Disposition: Closed; No Change — DDS-XTypes 1.4b1
  • Disposition Summary:

    Leave previous resolutions unchanged

    Appears that there is no need to make changes.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Enum literals sign

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The spec needs to be clear regarding whether enum literals always signed, always unsigned, or is something that can be selected.

    Seems like we should they the are always signed.
    This is what classic C and Java support

  • Reported: DDS-XTypes 1.3b1 — Mon, 8 Dec 2025 22:58 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Specify enum literals are signed

    Specify enum literals are signed

  • Updated: Wed, 12 Aug 2026 16:40 GMT

@doc annotation should not default the "value" parameter

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    There is no reason to allow and empty documentation

  • Reported: DDS-XTypes 1.3b1 — Tue, 9 Dec 2025 00:03 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Remove default parameter from @doc

    Change definition of @doc to not allow an empty documentation

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Deprecate XSD Type representation

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The XSD Type Representation is not supported by vendors.
    It is also lagging behind the others. Missing many of the features added to recent versions of XTYPES.
    We should deprecate/remove it

  • Reported: DDS-XTypes 1.3b1 — Mon, 29 Dec 2025 01:38 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Remove XSD Type Representation and update conformance

    Remove XSD as Type Representation. Preserve the XSD documents as a way to validate the XML Data Representation. Include references to DDS-XML where it makes sense.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

IDL's fixed data type is required in XTypes


Add mechanism to determine serialization detail/variations


Assignability rules for unions are brittle and restrictive

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The assignability rules for unions require matching or the member_id. By default these are assigned sequentially so a union that just reorders the cases becomes incompatible.

    This seems overly restrictive.
    For non-mutable unions, the value of the memberId is never serialized so there is no reason it should influence the type assignability. Considering it just makes unions brittle without providing any extra safely as this is already provided by the discriminator value.

    For mutable unions we are serializing the memberId ahead of the member. However, when it comes to deserializing the member that will hold the value is can be selected by the value of the discriminator. We could also use the memberId since it is available, but it is unclear what benefit that would carry.

    The current union assignability rules for assigning T1 from T2 require that members with the same ID has the same name and members with the same name have the same ID. However they do not require that the members selected in T1 and T2 for a give value of the discriminator have the same ID or name. They just need to be assignable.

    For example the unions T1 and T2 are assignable:

    union T1 switch (int32) {
      case 1:
          @id(10) int32 x;
      case 2:
           @id(20) int64 y;
    };
    
    union T2 switch (int32) {
      case 1:
          @id(30) int32 xx;
      case 2:
           @id(40) int64 yy;
    };
    

    However the unions T3 and T4 are not assignable

    union T3 switch (int32) {
      case 1:
          int32 x;
      case 2:
           int64 y;
    };
    
    union T4 switch (int32) {
      case 1:
          int32 xx;
      case 2:
           int64 yy;
    };
    

    In addition, if the union has a default case with a member specified it becomes impossible to add new cases because the default case has a single memberId which cannot match the memberId of multiple future cases.

    For example

    union U1 switch (int32) {
      case 1:
          @id(10) int32 x;
      default:
           @id(20) int64 y;
    };
    
    union U2 switch (int32) {
      case 1:
          @id(10) int32 x;
      case 2:
           @id(30) int64 x2;
    
     default:
           @id(20) int64 y;
    };
    

    Union U2 added a new case, since it is not a explicit case in U1 it would end up in the default branch, but there is no way for it to match the specific memberId in the default branch. This means we cannot take advantage 'default' negating the whole point of this construct...

    Given this, it seems like considering the memberId as part of assignability makes the union brittle and harder to extend. Without providing additional protection. Specially given that by default member IDs are assigned sequentially.

    Changing serialization rules for mutable unions would break existing systems. So it seems we should keep serializing the member ID. However we could relax compatibility rules to make unions easier to extend.

    (1) For final/appendable unions. we could just remove the condition on member ID. They would just be ignored as well as member names. As long the member selected by the discriminator has assignable types it would be enough.

    Alternatively, If we want additional protection, we could we could require that any non-default member selected in T1 has the same name as the member selected in T2. We could also say that if the members do not have the same name, then we check the ID and if the ID matches then we allow it. This would allow changing names as long as the ID is kept the same. But the benefit is not so clear given IDs are assigned sequentially by default. So we might want to combine this with assigning IDs as HASH by default.

    (2) For mutable unions, We could either ignore IDs and names (similar than final/appendable) or we could default to using @autoid("HASH")

    (3) We should apply a different criteria to the default branch. There it should be enough that the types match, regardless of the name of the member or its ID.

    As long as we change assignability rules to be more lenient it should not break existing systems s.

  • Reported: DDS-XTypes 1.3b1 — Tue, 26 Aug 2025 16:19 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Enhance union assignability rules

    Enhance union assignability rules to reduce opportunity for errors. Also introduce mechanisms to maintain existing matching behavior to avoid breaking interoperability and facilitate transition to the new rules.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Serialized size not defined for SCCIdentifier

  • Status: closed  
  • Source: Unity Foundation, NP ( Mr. Justin Wilson)
  • Summary:

    The `getTypeDependencies` operation (7.6.3.3.4.1) returns `TypeIdentifierWithSize`. The returned collection must use the SCCIdentifier for Strongly Connected Components. This begs the question, what is the size of the TypeObject corresponding to an SCCIdentifier?

    Step (d) of the algorithm in 7.3.4.9.2 may imply that it is the serialized size of a sequence of TypeObjects of the components but there is nothing explicit.

  • Reported: DDS-XTypes 1.3b1 — Fri, 7 Mar 2025 16:21 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Clarify the size associated with a SCCIdentifier

    Define serialized size of the TypeObject associated with a SCCIdentifier as the serialized size of the sequence<TypeObject> that contains all the types in the SCC

  • Updated: Wed, 12 Aug 2026 16:40 GMT

TypeFlags usage in normative IDL


Remove duplicate information from section 7.3.1 IDL Type Representation

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    After applying the resolution of DDSXTY12-2, section
    "7.3.1.3.1 Built-in Annotations" contains a lot of redundant information alaredy present in 7.2.2 "Attributes and Metadata" and 7.2.3.3.4.4 "Member Attributes and Metadata"

    7.3.1.3.1 should be about how IDL is used to represent the type system metadata, not define what the metadata means since that is already in 7.2.2 and 7.2.3.3.4.4

  • Reported: DDS-XTypes 1.3b1 — Thu, 13 Nov 2025 01:55 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Remove redundant information from the IDL representation

    Consolidate type-system concepts into 7.2 and redundant information from 7.3

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Consider referencing DDS-XML for the XML type and data representations

  • Key: DDSXTY14-5
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    DDS-XML defines the XML data representation. See 7.2 of DDS-XML
    DDS-XML defines the XML type representation. See 7.3.3 of DDS-XML

    So these definitions could be removed from DDS-XTYPES and just reference those specs.

    Also the XSD type representation could be deprecated from DDS-XTYPES. This has not been popular in practice. The XML type representation is far more popular...

  • Reported: DDS-XTypes 1.3b1 — Wed, 25 Sep 2019 22:14 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Reference DDS-XML for of the XML schemas

    Remove XML schemas from Annex A. Reference the schemas in DDS-XML instead.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Allow documentation and licensing to be associated with types

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    When creating a datamodel it is imortant to be able to document various elements (types, members, enumeration literals) this documentation belong ti the TypeSystem model as it is something that needs to me representable in all TypeRepresentations.

    Likewise data-types defined in teh TypeSystem may have associated licensing descriptions that need to be expressed in the various type representations.

    XTYPES should define these concepts and specify how that are represented.

  • Reported: DDS-XTypes 1.3b1 — Thu, 16 Oct 2025 04:29 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Add builtin annotations for documentation and licensing

    Add builtin annotations for documentation and licensing

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Data Representation for RTPS's Serialized Key

  • Status: closed   Implementation work Blocked
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    RTPS 2.3 section 9.4.5.3.1
    "D=0 and K=1 means that the serializedPayload SubmessageElement contains the serialized Key."

    XTypes section 7.4 "Data Representation" should define the rules for encoding an object of a type defined by the 7.2 "Type System" to a Key-only serialization.

    Using what's currently in the spec, there are two potential interpretations:

    a. follow all the encoding rules as for a full object (adding DHeader, EMHeader, etc.) but any part of that object that's not a key gets skipped, using 7.2.2.4.7 to determine what's a key

    b. use the rules in 7.6.8 (which are explicitly only for a KeyHash) to get a KeyHolder object and then encode that

  • Reported: DDS-XTypes 1.3 — Wed, 28 Oct 2020 19:43 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Specify how to so the serialization of the 'key fields' of a keyed type

    Update 7.6.8 "Interoperability of Keyed Topics" to talk about this case.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

XCDR2 serialization of non-trivial maps

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    This issue was raised by Idar Carlsen (Kongsberg Defence & Aerospace)

    In the X-Types 1.3 specification, under the “7.4.3.5.3 Complete Serialization Rules” section, it says that non-trivial maps should have a DHEADER when XCDR2 is used (rule 15). Notably, it only has the DHEADER – unlike the version 1 encoding, the size (in terms of numbers of entries) of the map is not serialized. This differs from how sequences are serialized, as they include the size as well. Is this correct, or should the size of the map also be serialized in addition to the DHEADER?

    It seems to me that some of the other DDS implementations include the size, even though the specification does not say so.

  • Reported: DDS-XTypes 1.3b1 — Tue, 5 Dec 2023 16:36 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Fix serialization of maps

    There is an error in the rule for map serialization needs had ommited serializing the number of elements which inconsistent with their treatment 'as a sequence of map entries'. It also does not match what vendors are actually doing.
    The rule should be updated to also serialize the number elements.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Typo in Member of AnnotationParameterValue, etc.


Appending to an appendable struct can break XCDR1 deserialization

  • Status: closed   Implementation work Blocked
  • Source: Foxglove Technologies Inc ( Mak Nazecic-Andrlon)
  • Summary:

    The XCDR1 encoding of both final and appendable structs uses PLAIN_CDR encoding. The idea behind appendable structs is that you can append members to them without breaking backward compatibility. However, this is not achievable with PLAIN_CDR encoding. Consider the following IDL (call this version 1):

    @appendable struct A

    { char x; }
    @appendable struct B { char s; A a; char t; }

    And now suppose in version 2 of we append a member to A and keep B the same:

    @appendable struct A { char x; char y; }
    @appendable struct B { char s; A a; char t; }

    Version 2 of B is assignable to version 1 of A, and thus a receiver using the version 1 definitions should successfully deserialize any serialized instance of B of version 2.

    However, this is not possible. Consider this version 3 of the IDL, which is not compatible with version 2, but is compatible with version 1:

    @appendable struct A { char x; }

    @appendable struct B

    { char s; A a; char t; char u; }

    Consider now the objects p = B { s: '1', a: A

    { x: '2' , y: '3' }

    , t: '4' } in version 2 and q = B { s: '1', a: A

    { x: '2' }

    , t: '3' , u: '4' } in version 3. We have p.t = '4' and q.t = '3'.

    For correctness, we need to have both deserialize_1(serialize_2(p)).t = '4' and deserialize_1(serialize_3(q)).t = '3' (where _n is the version of the IDL being used).

    However, both p and q serialize to "1234" under XCDR1. That is, serialize_2(p) = "1234" and serialize_3(q) = "1234".

    Substituting, we thus need to have both deserialize_1("1234").t = '4' and deserialize_1("1234").t = '3', which is impossible because '3' and '4' are distinct.

  • Reported: DDS-XTypes 1.3 — Thu, 10 Jul 2025 05:39 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Explain that Appendabe types are limited in XCDR1

    Specify that Appendable types are limited in XCDR1 and for the most part behave as FINAL.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Type Consistency Enforcement QoS Policy ignore_member_names

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The paragraph that explains ignore_member_names defines its semantics as follows:

    • If the option is set to TRUE, member names are considered
    • If the option is set to FALSE (the default), then
      member names are not ignored

    The mode of "considering" would seem to be the same as "not ignoring." Thus the spec is currently stating that the two options are equivalent. Since the name is ignore_member_names, that indicates that setting TRUE should indeed ignore them.

    The spec should be changed to indicate that if the option is set to TRUE then member names are ignored.

  • Reported: DDS-XTypes 1.3 — Mon, 25 Jan 2021 21:40 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with DDSXTY14-16

    Merge the explanation that that ignore_member_names set to TRUE means member names are ignored. Meaning they are NOT considered. into the reorganization done by DDSXTY14-16

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Unknown behavior of explicitly negated key in nested struct

  • Status: closed  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In section 7.6.8 it is stated that for a nested struct that is annotated as key for an embedding struct, you have to follow the following process to to generate its KeyHolder: "If there are any key members, then remove the non-key members from FooKeyHolder. Otherwise do not remove any members."

    So what if the struct has no explicit key members, but it has explicitly mentioned that a certain field should not act as key? Take for example the following example:

    struct Foo {
        long x;
        @key(false) long y;
    };
    
    struct Bar {
        @key Foo myFoo;
        string name;
    };
    

    There are three different ways to interpret the rules for this usecase:

    1. Both x and y will end up in the KeyHolder, since Foo did not specify any key members, so nothing gets removed.
    2. Only y will end up in the KeyHolder, since Foo specified explicitly that x should not act as key.
    3. Neither x nor y will end up in the KeyHolder, since some of the members have an explicit key annotation and so I remove all the members which are not keys, which is y (stated explicitly) and x (stated implicitly).

    So the big underlying question is: is explicitly stating @key(false) equal to not having a @key annotation at all, or does explicitly stating that a member is not a key have some more expressive power over implicitly determining its key status by absence of the @key annotation?

  • Reported: DDS-XTypes 1.3b1 — Wed, 27 Jan 2021 15:03 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Clarify what determines a keyed type and the members used to construct the key

    Clarify how keyed types are defined in a manner that is consistent with DDS 1.5 and RTPS 2.5
    Clarify which members are considered part of the key for the type
    Clarify which member types can be designated as key (merged issue /DDSXTY14-45)
    Clarify the IDL and XML syntax used to identify mey members and the meaning of designating a member wtth @key(false) in IDL and key="false" in XML.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Remove misleading sentence from 7.6.3.4.1 TypeConsistencyEnforcementQosPolicy: Conceptual Model

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.6.3.4.1 TypeConsistencyEnforcementQosPolicy: Conceptual Model says:

    * The ignore_member_names option controls whether member names are taken into consideration for type assignability. If the option is set to TRUE, member names are considered as part of assignability in addition to member IDs (so that members with the same ID also have the same name). If the option is set to FALSE (the default), then member names are not ignored.

    This can be misleading because the parenthetical explanation (so that members with the same ID also have the same name) only covers half of the assignability rules regarding memberId/memberName matching. Meaning Table 19 Assignability rules for Struct. The second bullet says

    * Any members in T1 and T2 that have the same name also have the same ID and any members with the same ID also have the same name.

    So relaxing only the constraint "so that members with the same ID also have the same name" is not enough to ignore the member name. Rather you need to also relax the "members in T1 and T2 that have the same name also have the same ID"

    The language in the section that follows: 7.6.3.4.2 "Rules for Type Consistency Enforcement" leaves less room for confusion as it says

    If the subscription allows type coercion and the ignore_member_names flag is true in TypeConsistencyEnforcementQoSPolicy, assignability checking shall ignore the member names in both Subscription and Publication types. That is, only member IDs will impact assignability.

    A possible solution is to update 7.6.3.4.1 to use he to use the same language as 7.6.3.4.2, or just remove the parenthentical expression as the precise rules are already in 7.6.3.4.2.

  • Reported: DDS-XTypes 1.3b1 — Sat, 30 Aug 2025 23:56 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Update 7.6.3.4.1 explanation of ignore_member_names to match 7.6.3.4.1

    Merge with DDSXTY14-40

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Add support for specifying the domainTag

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    In the DDS specification domains are identified by a integer domainId. This was expanded in the DDS-RTPS and DDS-Security specifications to also allow identification with a domainTag string. So the Domain is ultimately identified by a unique value of the tuple (domainId, domainTag).
    The core DDS has not been revised in a while but there is an issue filed to add it (DDS15-258).
    References:

    • RTPS version 2.5, Table 8.78 says:
      domainId DomainId_t Identifies the DDS domainId of the associated DDS
      DomainParticipant.
      domainTag string Identifies the DDS domainTag of the associated DDS
      DomainParticipant.
    • DDS Security 10.4.1.2.5.1
      On the "domain" element that appears in the Governance file:
      The value in this element identifies the DDS domains to which the rule applies. DDS domains are identified by their DomainId (an integer) and a DomainTag (a string). One or more DomainId values (or ranges) must always be specified. In addition, one or more DomainTag values or DomainTagExpression values may be optionally specified.
      If no DomainTag and DomainTagExpression is specified, then it shall be treated as if the empty string ("") was specified as the only DomainTag value.
      Example:
          <domains>
              <id>0</id>
              <id_range>
              <min>10</min>
              <max>20</max>
              </id_range>
              <tag>Robot15</tag>
              <tag_expression>AGVS/*</tag_expression>
          </domains>
      
  • Reported: DDS-XTypes 1.3b1 — Fri, 5 Sep 2025 14:37 GMT
  • Disposition: Closed; Out Of Scope — DDS-XTypes 1.4b1
  • Disposition Summary:

    Issue belongs to DDS-XML

    Wrong RTF. Issue belongs to DDS-XML

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Section 7.3.1.2.1.11 @ignore_literal_names is unclear

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    There are three problems.

    1. The beginning of 7.3.1.2.1.11 says “Table 18. In some cases, this is not desirable. This default behavior may be modified using the @ignore_literal_names annotation.” It is unclear what exactly may not be desirable. Perhaps this was referring to the fact that enumerator names are used in the assignability check which indeed may be undesirable.

    2. There is no way for `@ignore_literal_names` to be encoded in TypeObjects which means they are not used during discovery and cannot be used in assignability checks.

    3. The text should clarify if this is an annotation that is only applied locally and/or applied to remotes.

  • Reported: DDS-XTypes 1.3b1 — Tue, 24 Mar 2020 14:03 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Remove @ignore_enumeration_literals annotation

    @ignore_enumeration_literals is a Type Assignability option similar to ignore_member_names. Should be removed from the list of annotations.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Union members cannot be optional but serialization allows for it

  • Status: closed  
  • Source: Foxglove Technologies Inc ( Mak Nazecic-Andrlon)
  • Summary:

    Section 7.2.2.4.4.4.7 "Optional Members" of DDS-XTypes v1.3 states: "Union members, including the discriminator, shall never be optional." However, rule (26) uses FMEMBER instead of NOPT_FMEMBER.

  • Reported: DDS-XTypes 1.3 — Thu, 3 Jul 2025 05:52 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Update Table 21 to allow @optional annotation in union members

    Allow discriminator union members to be marked optional

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Add missing type definitions

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The speculation is missing the schema definition for multiple types and annotations that are part of DDS-XTYPES, IDL4, and DDS-RPC

    These include:
    uint8/int8, map, bitset/mask,
    bultin type declarations such as "unit"
    custom annotation definitions
    application of custom annotation
    Interface and Exception definition

    The specification and XSD files should be updated to add these missing elements

  • Reported: DDS-XTypes 1.3b1 — Tue, 5 Aug 2025 16:12 GMT
  • Disposition: Closed; Out Of Scope — DDS-XTypes 1.4b1
  • Disposition Summary:

    This issue belong to DDS-XML it was entered here in error

    This issue belong to DDS-XML it was entered here in error

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Clarify how "must_understand" and "optional" members are designated

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.2.2.4.4.4.6 "Members That Must Be Understood by Consumers" and 7.2.2.4.4.4.7 "Optional Members" talk about the concept of must understand members and optional members. Later sections 7.3.1 and 7.3.2 talk about representing types using IDL and XML. However these sections do not clearly say how the designation ties to those type representations.

    The behavior can be deduced from the definition of certain annotations (like @optional) and their defaults. However there is still room for ambiguities.

    Given this is fundamental to using the types It would be better if these specification was more explicit on how this designation happens using both IDL and XML.

  • Reported: DDS-XTypes 1.3b1 — Tue, 26 Aug 2025 09:27 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Be explicit about how to designate optional and must_undertand

    Add detail in 7.3.1 and 7.3.2 explaining how members are designated as optional and must undertand.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Discriminator default semantics are unclear

  • Status: closed  
  • Source: Foxglove Technologies Inc ( Mak Nazecic-Andrlon)
  • Summary:

    The spec says "any discriminator value that does not explicitly identify another member is considered to identify the default member". This sounds like "if a given discriminator value does not appear in a union case definition, then that discriminator value identifies the default member". (As a side effect, this means that unions with a default case can never have cases added or removed, even if marked as appendable or mutable, since a receiver would have to interpret the discriminators of unknown cases as indicating the default member. I am unsure if this is intended, but a non-normative note should possibly be included.)

    However, then it says "it is not required for every potential discriminator value to be associated with a member", which seems to contradict the previous claim.

  • Reported: DDS-XTypes 1.3 — Mon, 7 Jul 2025 04:01 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Update description of union values associated with the default member

    Update description of union to be more clear about which discriminator values are associated with the default member

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Clarify the intended member ID of a union's discriminator

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Note: This issue was filed in RTF 3 by Idar Carlsen. As RTF3 is already close it is being copied into RTF4.


    // Unions with extensibility MUTABLE, version 2 encoding
    // see (22) for serialization of MMEMBER using version 2 encoding
    (27) XCDR[2] << {O : MUNION_TYPE} =
     XCDR
     << { DHEADER(O) : UInt32 }
     << { O.disc : MMEMBER }
     << { O.selected_member : MMEMBER }?
    

    The specification says the discriminator should be treated as an MMEMBER, but it is not clear what the member ID of the discriminator should be. This has caused interoperability issues as different vendors are using different IDs.

    In Kongsberg's implementation, we've been using 0 for the discriminant. The first member of the union has thus had the member ID 1 (assuming @autoid(SEQUENTIAL)).

  • Reported: DDS-XTypes 1.3b1 — Thu, 21 Mar 2024 03:51 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Specify the union discriminator has member ID zero.

    Add text to 7.2.2.4.4.3 "Union Types" specifying the union discriminator has member ID zero.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Correct comment in Annex B struct MinimalStructMember

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Annex B declares MinimalStructMemberSeq as:

    // Member of an aggregate type
    @extensibility(APPENDABLE) @nested
    struct MinimalStructMember {
        CommonStructMember common;
        MinimalMemberDetail detail;
    };
    // Ordered by common.member_id
    typedef sequence<MinimalStructMember> MinimalStructMemberSeq;
    

    The comment is wrong: It contradicts section 7.3.4.5 where it says it should be ordered by member index. It is also inconsistent with struct CompleteStructMemberSeq before.

    Instead, the comment before MinimalStructMemberSeq it should say:

    // Ordered by the member_index
    
  • Reported: DDS-XTypes 1.3b1 — Wed, 9 Apr 2025 18:30 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Correct comment in Annex B, struct MinimalStructMember

    Perform the correction proposed in the issue description.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Fix namins/inconsistencies in machine readable files dds-xml_application_example.xml

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The machine readable file machine readable file dds-xml_application_example.xml use some names that are not appropriate to the their context. For example it has a <data_reader> that has been named "MySquareWriter" this is likely a copy-paste error and should have been named "MySquareReader"

  • Reported: DDS-XTypes 1.3b1 — Fri, 14 Feb 2025 01:27 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Update names used in dds-xml_applications_example.xml

    Update dds-xml_applications_example.xml

  • Updated: Wed, 12 Aug 2026 16:40 GMT
  • Attachments:

Update IDL definition of union TypeIdentifier in Annex B to account for primitive types

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The union TypeIdentifier definitoon in Annex B contain several cases commended out. This is done because (per the comment in the IDL) union cases all have to have an associated member/value

    // All primitive types fall here.
    // Commented-out because Unions cannot have cases with no member.
    /*
    case TK_NONE:
    case TK_BOOLEAN:
    case TK_BYTE_TYPE:
    case TK_INT8_TYPE:
    case TK_INT16_TYPE:
    ...
    

    Since the union discriminator is an octet, it is possible to set it to the values shown in the comment (e.g. TK_INT8_TYPE) in this situation since the case member is not shown the discriminator will be set but no branch would be selected so there is no associated value.
    In other words, we can get the desired behavior of having the discriminator set but no value selected (so nothing beyond the discriminator is serialized), but we cannot express the expectation of all those cases in the IDL...

    This could be corrected in two ways:
    (1) We could use a enumerated value with @bit_bound(8) as the type of the discriminator instead of the octet. The list of literals would make it obvious what the expected values for the discriminator
    (2) We could keep the union discriminated by an octet and uncomment all the cases for the primitive types. Then we would need to add a "dummy" member so the case has an associated value, but we could mark it @non_serialized so it has no impact on the wire representation.

    It would seem that (1) is cleaner but (2) is less disruptive...

  • Reported: DDS-XTypes 1.3b1 — Sat, 12 Aug 2023 02:20 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Update definition of TypeIdentifier

    Update TypeIdentifier in Annex B and dds-xtypes-typeobject.idl to use an empty structure to handle the cases values that have no member associated

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Conflicting Order of Minimal Struct and Union Members in TypeObject

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    Section 7.3.4.5 specifies that all struct and union members in TypeObjects are to be ordered by member index/declaration order.

    •The elements in CompleteStructMemberSeq shall be ordered in increasing values of the member_index.
    •The elements in MinimalStructMemberSeq shall be ordered in increasing values of the member_index.
    •The elements in CompleteUnionMember shall be ordered in increasing values of the member_index.
    •The elements in MinimalUnionMember shall be ordered in increasing values of the member_index.

    There are comments in the IDL in front of the sequence typedefs for these members that also specify the order. The complete ones agree that they should be sorted by member index, but the minimal ones say they should be sorted by member id:

    // Ordered by common.member_id
    typedef sequence<MinimalStructMember> MinimalStructMemberSeq;
    ...
    // Ordered by MinimalUnionMember.common.member_id
    typedef sequence<MinimalUnionMember> MinimalUnionMemberSeq;

  • Reported: DDS-XTypes 1.3 — Wed, 29 Mar 2023 22:13 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with DDSXTY14-88

    This issue is the same as DDSXTY14-88

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Table 9 is missing BITMASK_TYPE

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Add BITMASK_TYPE to table 9

  • Reported: DDS-XTypes 1.3 — Tue, 15 Nov 2022 22:08 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Add BITMASK_TYPE to Table 9

    See Issus description

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Missing TK_INT8 and TK_UINT8 in the IDL machine readable file


Impossible to handle @must_understand AND @optional fields in an @appendable struct correctly

  • Status: closed   Implementation work Blocked
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The XTypes spec seems to suggest that @must_understand fields are applicable to any non-final datatype. Section 7.3.1.2.1.9 mentions this:

    "By default, the assignment from an object of type T2 into an object of type T1 where T1 and T2 are non-final types will ignore any members in T2 that are not present in T1. This behavior may be changed by applying the @must_understand annotation to a member within a type definition."

    That would mean that @must_understand fields are also applicable to @appendable structs, but in this case there is no way for a field to be identified as must_understand field in its Delimited-CDR representation.

    Of course you could state that in case of @appendable structs, you should determine assignability at discovery time and not at run time, in which case you are not dependent on the availability of a must_understand bit in the serialized blob. However, in case a Writer publishes a sample with a field that is both @must_understand AND @optional, according Table 19 (section 7.2.4.4.8) there is no mismatch between this Writer and a Reader that is missing the field (that is only the case if the field has @optional set to FALSE), which means the sample needs to be matched at runtime.

    The spec is a little unclear of the semantics in this case: I guess that if the optional value is empty but must_understand you can slice it out of the projected type, but when it is not empty you are not allowed to slice the value out since it is a must_understand value and you will have to discard the whole sample instead. It would be nice if the spec could explicitly confirm or deny this.

    But working from the presumption that you are indeed allowed to slice out values that are both empty and must_understand, the next problem arises immediately: how does a Reader know that a sample containing an unfamiliar field actually represents an optional field that is must_understand?

    Let's consider a scenario where I have a Reader that is reading a type A with the following defintion:

    @appendable struct A {
        @key long id;
         long x;
    };
    

    Now this Reader can be matched against all sorts of Writers, including Writers that have appended all kinds of fields to the end of this datatype: its deserializer simply slices everything out that comes after field x.

    This works well for most appended versions of this datatype, but now suddenly an additional Writer joins the system with the following definition:

    @appendable struct A {
        @key long id;
         long x;
        @optional @must_understand long y;
    };
    

    This Writer will match the Reader according to Table 19 since although the @must_understand annotation is TRUE, the corresponding @optional field is NOT false. So now the deserializer for our Reader has to deserialize a sample for which it doesn't know what the payload after the x actually represents. It might represent a value that it can safely slice out, or it might represent a value that may not be sliced out.

    The spec states in rule number 20 of section 7.4.3.5.3 that in case of XCDRV2, an optional member is preceeded by a boolean called is_present. The problem here is that our deserializer doesn't know where the sample originates from therefore has no knowledge whether the byte following field x represent an is_present boolean or just some other sliceable field.

    So the basic question boils down to this:

    • Do we allow fields that are both must_understand and optional in case of Appendable extensibility?
    • If so, how do we indicate in this case that a field is both optional and must_understand in a preferably backward compatible way?
  • Reported: DDS-XTypes 1.3b1 — Mon, 10 Jan 2022 15:02 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Provide explicit type compatibility rules for Appendable tyoes with @must_undertand members

    Only practical solution. Agreed 3/21/23

    For appendable types a member @optional @must_understand on the Sender type would be not assignable if the Receiver does not understand the member. The fact that the field is marked @optional does not change the assignability rules for the Type.

    For mutable types the rules remain the same, the @optional makes the types compatible even if the member is not understood. The samples that have that member will be dropped or whatever if the @try_contruct happens to play on this as well.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Enums with different holder types should not be assignable

  • Status: closed   Implementation work Blocked
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The row for ENUM_TYPE in Table 40 defines an enum's holder type.

    Footnote 3 on page 63 indicates that the type system is designed to allow a DataReader to consume a byte stream from a differently-typed (but assignable) DataWriter without "requiring the consultation of per-DataWriter type definitions during sample deserialization".

    The current definition of Enum Assignability fails in this respect. It needs to prevent enum types from being assignable when their holder types differ.

    Also relevant - pgh 2 of 7.2.4.2 "...Enumerated types (Enumeration and Bitmask) are delimited types as their serialized size is fixed"

  • Reported: DDS-XTypes 1.3 — Wed, 26 Aug 2020 18:09 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Constrain assignability of enum types with different bit_bounds

    To meet the requirements of "7.2.4.2 Concept of Delimited Types," add an additional constraint to assignability of enumeration types.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Table 60 - RTPS encapsulation identifier

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    In this table, the row second from the bottom for "XCDR MUTABLE 2 Little Endian" has the wrong identifier.

  • Reported: DDS-XTypes 1.3 — Thu, 11 Mar 2021 15:44 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Table 60 - RTPS encapsulation identifier

    The row that starts with "XCDR MUTABLE 2 Little Endian" should have PL_CDR2_LE in the RTPS Encapsulation Identifier column

  • Updated: Wed, 12 Aug 2026 16:40 GMT

The list of valid KEY types does not include String types

  • Status: closed  
  • Source: Twin Oaks Computing, Inc. ( Mr. Clark Tucker)
  • Summary:

    The text reads:

    "A type's key can only include members of the following types: primitive, aggregation,
    enumeration, bitmask, array, and sequence."

    It should include 'string' and 'wstring'.

  • Reported: DDS-XTypes 1.3 — Thu, 6 May 2021 15:53 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with DDSXTY14-41

    DDSXTY14-45 is refactoring section 7.2.2.4.4.4.8 "Key Members" of the specification.This section is where the legal types for key members are listed. So handling this issue a the same time would be the simplest approach.

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Anonymous Types in Strongly Connected Components

  • Status: closed   Implementation work Blocked
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Section 7.3.4.9.2 describes the algorithm for computing type identifiers for strongly connected components. Step 4b says

    If the Strongly Connected Component (SCC) has multiple types, then sort them using the lexicographic order of their fully qualified type name. Let SCCIndex(U) be the sort index of each type U belonging to the SCC starting with index 1 for the first type. For anonymous types concatenate the fully qualified name of the containing type with the member name using “.” as the separator, for example “MyModule::MyStruct.myMember”.

    This does not cover all possibilities for anonymous types. To illustrate, the following IDL with recursive types uses an anonymous type in a typedef:

    struct NodeData {
      long l_data;
    };
    struct TreeNode;
    typedef sequence<@external TreeNode> Children;
    struct TreeNode {
      NodeData data;
      Children children;
    };
    

    The algorithm requires a name for sequence<@external TreeNode>. In general, the rule for naming anonymous types in step 4b must be expanded to include anywhere an anonymous type may appear including structs, unions, typedefs, and other anonymous types.

    An additional, related, problem is that given the definition of Plain...
    7.3.4.1 “Plain types only have a TypeIdentifier. Non-plain types have both a TypeIdentifier and a TypeObject.”
    the children field of TreeNode of the SCC example in 7.3.4.8 is a Plain Collection and has no TypeObject

    struct NodeData {
      long l_data;
    };
    struct TreeNode {
      NodeData data;
      sequence<@external TreeNode> children;
    };
    

    Step 4(b)ii of the algorithm in 7.3.4.9.2 requires that all of the types in an SCC have a TypeObject 4(b)ii.
    Possible Solutions and Notes:
    The algorithm implies that all of the types involved in a Strongly Connected Component have a type identifier of TI_STRONGLY_CONNECTED_COMPONENT. The precludes the use of the Plain Collections in Strongly Connected Components. Thus, if the algorithm of 7.3.4.9.2 is not revised, then the definition of Plain Collections needs to be revised to exclude those involved in a Strongly-Connected Component.

  • Reported: DDS-XTypes 1.3 — Wed, 2 Sep 2020 16:25 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Define rules to name anonymous types in SCC

    Define rules to assign names to anonymous types while computing the TypeId of SCC.

    Anonymous types do now have names. But when they appear within a Strongly Connected Component we need something equivalent to sort them alongside the other types in the SCC. Introduce the concept of a 'sorting label' used in this algorithm to avoid having to name the Anonymous type.

  • Updated: Wed, 12 Aug 2026 16:40 GMT
  • Attachments:

8 bit types, enumerated types, and union inheritance missing in 7.2.1

  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In 7.2.1 it says:

    Integral types of various bit lengths (16, 32, 64), both signed and unsigned

    8 bit types are missing, so updated this to

    Integral types of various bit lengths (8, 16, 32, 64), both signed and unsigned

  • Reported: DDS-XTypes 1.3 — Tue, 17 Aug 2021 11:22 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Specify union inheritance

    Add "8" to the list of int sizes in 7.2.1
    Mention enumerated types (enum and bitmask) and union inheritance

  • Updated: Wed, 12 Aug 2026 16:40 GMT

Inconsistent Definitions of RTPS Encapsulation

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    There are inconsistencies in the two definitions of the RTPS Encapsulation Header I've found so far. The major issue is that the values for the encoding identifiers are different between 7.4.3.4 and 7.6.3.1.2 for non-XCDR1 encodings. These are the big-endian values compared:

    Type 7.4.3.4 7.6.3.1.2
    Plain XCDR2 0x00, 0x10 0x00, 0x06
    Parameter List XCDR2 0x00, 0x12 0x00, 0x0a
    Delimited XCDR2 0x00, 0x14 0x00, 0x08
    XML 0x01, 0x00 0x00, 0x04

    The other issue is that while 7.6.3.1.2 describes the two options bytes of the encapsulation header that follow the encoding identifier and extends it for padding info, 7.4.3. is lacking in details as far as I can see. The serialization rules has them in 7.4.3.5.3 as `OPTIONS`, but doesn't define it in any of the tables before the rules like all the other symbols are. It does mention encapsulation in 7.4.3.5, but doesn't mention anything about extending the options bytes.

  • Reported: DDS-XTypes 1.3b1 — Thu, 4 Jun 2020 17:51 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Update Table 39 to match 7.6.3.1.2 Table 60

    Follow 7.6.3.1.2 Table 60

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Clarify whether the algorithm to compute KeyHash is specific to XTYPES

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    In 7.6.8 'Interoperability of Keyed Topics' it states:

    As described in [RTPS] Clause 9.6.3.8, “KeyHash (PID_KEY_HASH)”, the key hash for a given object of a keyed type is obtained by first serializing the values of the key members in their declaration order. The algorithm described in that clause shall be amended as described below.

    It is not clear whether the intent is that this modification impacts only implementors of the DDS-XTYPES or whether it is intended as a change in RTPS (which would require an issue filed on the DDSI-RTPS specification).

  • Reported: DDS-XTypes 1.3b1 — Fri, 8 Mar 2019 04:13 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with DDSXTY14-38

    Merge with DDSXTY14-38

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Missing parameter in Annex C operation DynamicDataFactory::create_data

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The IDL declaration of interface DynamicDataFactory in Annex C, declares the operation with no arguments.

    However according to section 7.5.2.10 'DynamicDataFactory' the operation takes a parameter of type DynamicType. Therefore the correct IDL declaration should have been:

            DynamicData create_data(in DynamicType);
    
  • Reported: DDS-XTypes 1.3b1 — Thu, 14 Mar 2019 04:11 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Add DynamicType parameter to create_data

    Add parameter

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Specify that TypeLookup Service uses XCDR2

  • Status: closed   Implementation work Blocked
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    7.6.3.3.3 defines built-in RTPS Endpoints for TypeLookup, but doesn't specify their Data Representation. Since TypeLookup is new, this should be XCDR2.

  • Reported: DDS-XTypes 1.3 — Tue, 28 Jul 2020 19:45 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Data Representation and Extensibility for TypeLookup Service

    Independent implementations of this specification (or a subsequent minor update) must be interoperable with respect to the data payloads written and read on the RTPS Built-In Endpoints dedicated to the TypeLookup Service.

    This proposal specifies the Data Representation and Extensibility aspects of the data types used on these Endpoints so that the byte streams written according to the rules in 7.4.3.5 can be interpreted by any compliant implementation.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

7.4.3.5.3 contradictory rules for collections

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Arrays of all kinds/extensibilities are covered by rules 8-10. Following those we find the "comments" below:

    // Arrays with extensibility APPENDABLE use common APPENDABLE rules:
    // (29)-(30)
    // Arrays with extensibility MUTABLE are not allowed. Treated as APPENDABLE.
    

    Which is either redundant or contradictory. Same issue with Sequences (rules 11-13) and maps (rules 14-16).

    Due to this, the notes before rules 29-30 should be revised to remove "Collection or"

    // Extensibility APPENDABLE (Collection or Aggregated types), version ?
    // encoding
    
  • Reported: DDS-XTypes 1.3 — Tue, 30 Jun 2020 20:01 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Collection types don't have extensibility

    In section 7.2.3, Table 12 states that collection types have no extensibility. The rules in 7.4.3.5 need to be updated to match this.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Missing alignment for XCDR1 mutable's sentinel

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Rule 23 is missing "ALIGN(4)" before PID_SENTINEL

    // Structures with extensibility MUTABLE, version 1 encoding
    (23) XCDR[1] << {O : MSTRUCT_TYPE} =
    XCDR
    << { O.member[i] : MMEMBER }*
    << { PID_SENTINEL : UInt16 }
    << { length = 0 : UInt16 }
    
  • Reported: DDS-XTypes 1.3b1 — Mon, 29 Jun 2020 23:27 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Modify Rule 23 adding "ALIGN(4)" before PID_SENTINEL

    Modify Rule 23 and 28 adding "ALIGN(4)" before PID_SENTINEL
    Also change PID_SENTINEL to PID_LIST_END

  • Updated: Wed, 12 Aug 2026 16:39 GMT

DataRepresentationQosPolicy default

  • Status: closed   Implementation work Blocked
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    7.6.3.1.1 ends with
    "The default value of the DataRepresentationQosPolicy shall be an empty list of preferences.
    An empty list of preferences shall be taken to be equivalent to a list containing the single element XCDR"

    This contradicts the rest of the section which describes how XCDR (v1) is optional. The default should be XCDR2.

  • Reported: DDS-XTypes 1.3 — Tue, 28 Jul 2020 19:37 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Implementation-defined default for DataRepresentationQosPolicy

    Section 2.3 defines an optional profile makes it clear that compatibility with XTypes 1.1 is not required. The text in 7.6.3.1 must be updated to reflect this.

    The use of the term "list of preferences" in section 7.6.3.1.1 is confusing, this proposal replaces it.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Make the format of annotation parameters more robust

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    When an annotation application definition has a simple parameter the application can omit the parameter name.

    When an annotation application specifies multiple parameters it is possible to commit the parameter name for the parameter named "value" ,

    This means that an annotation that was specified with a single parameter (not called value) which is then extended will need to be modified if a second parameter is added.

    Instead it would be more flexible to say that the first parameter can be unnamed regardless of the name.

  • Reported: DDS-XTypes 1.3b1 — Wed, 30 Oct 2024 16:48 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with DDSXTY14-49

    This cover the same sections and concepts as DDSXTY14-49. merge into that issue.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Extra fields in IDL of 7.8.2.1 create_client

  • Key: DDSXTY14-6
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The CLIENT_Representation contains an extra field client_timestamp that is not in the IDL defined in Annex A.

    The AGENT_Representation contains an extra field agent_timestamp that is not in the IDL defined in Annex A.

  • Reported: DDS-XTypes 1.3b1 — Tue, 29 Oct 2019 01:04 GMT
  • Disposition: Closed; Out Of Scope — DDS-XTypes 1.4b1
  • Disposition Summary:

    Issue submitted to the wrong RTF

    This issue was submitted to the wrong RTF. It belongs to DDS-XRCE.
    It has been added there. So it should be closed as out-of-scope from this RTF.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Extra text left in section 7.2.2.4.4.4.4 Member IDs

  • Key: DDSXTY14-8
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    In DDS-XTYPES 1.3 there was an issue (https://issues.omg.org/browse/DDSXTY13-2) whose resolution added the precise specification of the computation of the memberId. This is now in section 7.3.1.2.1.1 'Member IDs' specifically the three-step algorithm towards the end of the section.

    This algorithm fully uses 32 bits. The 4 MSB are set to zero and the remaining 28 bits computed from a hash. Because of this there is no longer a 'reserved range' for memberIds.

    However the resolution of DDSXTY13-2 still left some text in section 7.2.2.4.4.4.4 that talks about reserved ranges. This text should also have been removed. In fact it seems that there was an instruction in DDSXTY13-2 to remove the paragraph but it either was not applied correctly or it missed a sentence that followed the paragraph. To correct it, the following text should be removed from section 7.2.2.4.4.4.4 'Member IDs'

    The remaining part of the member ID range—from 0 to 268,402,687 (0x0FFFBFFF)—is available for use by application-defined types compliant with this specification.

  • Reported: DDS-XTypes 1.3b1 — Fri, 21 Feb 2020 00:40 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Remove extra text from 7.2.2.4.4.4.4 'Member IDs'

    Remove the text as suggested in the issue description.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Wrong name for DataRepresentationQosPolicy field

  • Key: DDSXTY14-4
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.6.3.1.3 'DataRepresentationQosPolicy: Platform-Specific API' states:

    The topic, publication, and subscription built-in topic data types shall each indicate the data representation of the associated entity with a new member:

    @id(0x0073) DDS::DataRepresentationQosPolicy representation;

    This does not follow the naming conventions for field names. Instead it should have said that the new member should be:
    @id(0x0073) DDS::DataRepresentationQosPolicy data_representation;

    Likewise in Annex D the declarations of structures TopicBuiltinTopicData, TopicQos, PublicationBuiltinTopicData, DataWriterQos, SubscriptionBuiltinTopicData, and DataReaderQos all have the member:

    @id(0x0073) DDS::DataRepresentationQosPolicy representation;
    

    This should be changed so the member is:

    @id(0x0073) DDS::DataRepresentationQosPolicy data_representation;
    
  • Reported: DDS-XTypes 1.3b1 — Thu, 15 Aug 2019 00:46 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Change the field name "representation" to "data_representation"

    In the DataRepresentationQosPolicy, change the field name "representation" to "data_representation".

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Add Unions to types supported in Queries and Filters

  • Key: DDSXTY14-1
  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    "Member Names" (7.6.7.1) is missing support for Unions. Union members can be accessed by name as long as a reserved name is specified for the discriminator. A valid filter expression needs to check the discriminator before accessing another member name (for example u.disc = 3 AND u.val < 100), however the implementation doesn't need to check for this. If evaluating a filter expression causes access to an inactive element of a union, the result is undefined.

  • Reported: DDS-XTypes 1.3b1 — Mon, 22 Jul 2019 15:36 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Add explanation for unions in queries & filters

    Explain how union member values are specified within filters and queries

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Bad reference to RTPS leads to apparent circularity

  • Status: closed  
  • Source: Foxglove Technologies Inc ( Mak Nazecic-Andrlon)
  • Summary:

    The first sentence of page 215 says "As defined in the RTPS specification, a data encapsulation is identified by a two-byte value, the “encapsulation identifier” [RTPS].". But [RTPS] refers to DDSI-RTPS v2.3, which does not contain those terms. Those terms were last used in DDSI-RTPS v2.2. Instead, since v2.3 of DDSI-RTPS, we have a `SerializedPayload` instead of a "data encapsulation and a `RepresentationIdentifier` instead of an "encapsulation identifier". Furthermore, versions 2.3-2.5 (2.5 being the latest version at the time of this report) of DDSI-RTPS refer to DDS-XTypes v1.2 for the `RepresentationIdentifier`. DDS-XTypes v1.2 then refers to DDSI-RTPS v2.2. I haven't followed the chain further, but I think it should be broken in the next revision, with at least one of RTPS or XTypes ceasing to refer to the other.

    In summary:

    • DDS-XTypes v1.3 refers to something nonexistent in DDSI-RTPS v2.3.
    • DDSI-RTPS v2.3+ refer to DDS-XTypes v1.2 on the same subject.
    • DDS-XTypes v1.2 refers to DDSI-RTPS v2.2 on that subject.
  • Reported: DDS-XTypes 1.3 — Tue, 20 May 2025 04:41 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Update 7.6.3.1.2 to align it with the new language in RTPS 2.5

    Update 7.6.3.1.2 to use the terms in RTPS 2.5, including "RepresentationIdentifier" and RepresentationOptions. Remove obsolete text from the initial version of XTYPES which was referencing old versions of RTPS.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Wrong type name used: VehiclePositionType

  • Status: closed  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    In the spec this section reads:

    7.2.1.1 Type Evolution Example

    Assume a DDS-based distributed application has been developed that uses the Topic “Vehicle
    Location” of type VehicleLocationType. The type VehiclePositionType itself was defined
    using the following IDL:

    (quote)
    // Initial Version
    struct VehicleLocationType {
    (quote)

    VehiclePositionType in the second sentence should be replaced with VehicleLocationType

  • Reported: DDS-XTypes 1.3 — Fri, 13 Sep 2024 17:04 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with other issues covering typos

    Merge with other issues covering typos, apply suggested correction.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Support optional for union members, add exception

  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Would be useful to have support for @optional for union members.

    As IDL exceptions can be used through DDS-RPC also add exception members to this table, very likely to the ones that also are supported by structures

  • Reported: DDS-XTypes 1.3 — Wed, 11 Sep 2024 13:29 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Address optnional union members alongside DDSXTY14-95

    Merge with DDSXTY14-95

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Typo fixes

  • Status: closed  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    Pg 48 7.2.2.4.6 first sentence

    For each Aggergated Type "T" the type system defines a related [...]

    -> Aggregated


    Pg 48 7.2.2.4.6 first sentence

    [...] obtainied from "T" by removing the key designation

    -> obtained


    Pg 50 7.2.2.4.7 first sentence

    [...] obtainied from "T" as follows:

    -> obtained


    Pg 54 Figure 19 label at aggregation arrow to AnnotationParameter

    +paramter_seq

    -> +parameter_seq


    Pg 133 Table 38 4th row column meaning

    Conditionally swaps the bytes [...] matches the native Endianess

    -> Endianness


    Pg 146 continuation of 7.4.3.5.3 4th line from top

    // FMMEBER can be NOPT_FMEMBER [...]

    -> FMEMBER


    Pg 215 Table 60 4th column, header

    Endianess

    -> Endianness


    Pg 248 continuation of Annex A 2nd para from top

    <xs:simpleType name="autoIdKind">
      <xs:restriction base="xs:string">
        <xs:enumeration value="hash"/>
          <xs:enumeration value="sequencial"/>
    

    -> <xs:enumeration value="sequential"/>


    Pg 263 continuation of Annex B bottom of page

    // Flags that apply to type declarationa and DO affect assignability
    

    -> declarations


    Pg 266 continuation of Annex B 3rd para from top

    // Used for Types that have cyclic depencencies with other types
    

    -> dependencies


    Pg 268 continuation of Annex B approx 10 lines down

    // ============ Plain collectios - use TypeIdentifierKind =========
    

    -> collections

  • Reported: DDS-XTypes 1.3 — Tue, 20 Aug 2024 10:13 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    merge with other issues that address typos

    merge with other issues that address typos

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Inconsistent specification of where annotations can apply

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification is not consistent regarding which elements can be annotated. Specifically regarding typedef declartions.

    Section 7.2.2.6 "Annotations" says:
    "An annotation describes a piece of metadata attached to a type or an element/member/literal of an aggregated/collection/enumerated type. Annotations can also be attached to the related_type of an alias type."

    However
    section 7.3.1.2.1 (Built-in Annotations) says:

    In IDL, an annotation may be applied to any construct or sub-construct
    (see Sub Clause 7.4.15.2, [IDL]). This specification restricts the applicability of annotations to constructed types, bitmask constants, enumerated type literals, and members of aggregated types.

    I believe the intent all along was to allow annotations, such as @range and @unit in typedef. Also would be nice to align with whet IDL4 says.

    At a minimum in XTYPES we should remove the specification of where annotations apply from section 7.3.1.2.1 and instead reference 7.2.2.6.

  • Reported: DDS-XTypes 1.3b1 — Tue, 17 Sep 2024 08:38 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with DDSXTY14-108

    Merge with DDSXTY14-108 as that issue is clarifying the use of annotations.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Misspellings of "aggregated"

  • Status: closed  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    Pg 43 7.2.2.4.4.4.3 Member Index 2nd sentence

    [...] of the member within the Aggegated type.

    Pg 47 7.2.2.4.5 Inheritance of Aggregated Types 1st sentence

    The Type System supports single inheritance of Aggegated Types.

    Pg 49 continuation of 7.2.2.4.6 comment before union Command_TypeErased

    // The related KeyErased type definition only applies to aggegated types.

    Pg 51 continuation of 7.2.2.4.7 comment before union Command__KeyHolder

    // The related KeyHolder type definition only applies to aggegated types.

    On this last occurrence, is the double underscore in union Command__KeyHolder intentional?

  • Reported: DDS-XTypes 1.3 — Tue, 20 Aug 2024 09:14 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Correct typo

    Merge with other issues correcting typos

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Confusing classification of Annotations

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    In some places the specification talks about Annotations as if they were types but in others it does not. There are other inconsistencies in how they are described. For example 7.2.2.4.4.1 says:

    There are three kinds of Aggregated Types: structures, unions, and annotations. These kinds are described in Table 8.

    But Table 8 does not list them. And also they appear in a parallel section 7.3.2.9 at the same level as Aggregated Types, which contradicts them being an Aggregated Type.

    Also in 7.3.1.2.4 It says:

    Recall from the Type System Model that annotation types are a form of aggregated type similar to a structure. The members of these types shall be represented using IDL members, as shown in the following example:

    In the IDL Type Representation there is a section about "Annotation Language" and talks about annotation types.

    Annotation do have a TypeObject.

    It seems that saying "Annotations are Types" is prone to cause some ambuguities because thet do not behave like other "types" that cannot be used to type members. aliases, collection elements, etc. So it may be better to modify the terminology and not treat them as types (other than having a TypeObject") or make it clear these are special.

  • Reported: DDS-XTypes 1.3b1 — Tue, 26 Aug 2025 22:46 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Rephrase how annotations are described

    Explain the role of annotations, the fact that they do have a type object and can be exchanged by teh TypeLookup service but are otherwise not treated the same as other types (e.f. cannot be used to type members of a structure, etc.) the are used to define schemas used to apply annotations to types, tyoe members, etc.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Remove all IDL42 specified parts

  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    DDSXTypes refers in section 3 to IDL4.2 but still duplicates a lot of things which are now part in IDL4. It is now very hard to determine what is part of IDL4 and what is DDSXTypes specific, for example bit_bound seems to be just for DDS, it is not part of IDL4.

  • Reported: DDS-XTypes 1.3 — Thu, 19 Aug 2021 09:38 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Remove syntax that duplicates what is defined in IDL42+

    Remove syxtax that duplicatse what is defined in IDL42+. Refer to [IDL] instead.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Must Undestand rules are not working well with appendable types

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Checking assignability from T2 to T1 for appendable types where T2 has some extra members that are marked optional and must_understand cannot be implemented the way it is specified.

    Assume:

    @appendable
    struct ReaderType {
       int32 m1;
    };
    
    @appendable
    struct WriterType {
       int32 m1;
       @optional @must_understand
        int32 m_opt_must_understand;
    };
    

    According to assignability rules these are compatible but the reader needs to drop the WriterType samples that contain the m_opt_must_understand field set (not all samples since it is optional).

    However given how XCDR de-serializes appendable types it will never look to see if those extra fields are set since they are not part of T1 and the T1 deserializaton will skip everything after deserializing m1 using the DHEADER.

  • Reported: DDS-XTypes 1.3b1 — Fri, 14 Nov 2025 18:58 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Duplicates DDSXTY14-54

    Duplicates DDSXTY14-54

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Update Section 6.1 and 7.2.1

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 6.1 was written as a motivation for XTYPES and contains a few misleading statements that are no longer true once XTYPES was adopted. E.g. that DDS needs to be used withg staically-defined types.

    Also there is information there that has not been updated to match the more recent versions of XTYPES and is now confusing at best. For example Table 2 mentions CDR and Parameterized CDR and never mentions XCDR or the versions of XCDR.

    This section should be reviwed and updated.

    7.2.1 Background (Non-Normative)
    says:
    The specified type system is designed to be sufficiently rich to encompass the needs of modern distributed applications and cover the basic data types available both in common programming languages such as C/C++, Java, and C#, as well as in distributed computing data-definition languages such as IDL or XDR.

    XDR is far from modern. It should be replaced with nore modern formats like Protobuf or Avro

  • Reported: DDS-XTypes 1.3b1 — Thu, 2 Oct 2025 04:52 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Update sections 6.1 and 7.2.1

    Merge content of 6.1 into 7.2.1 and update it to focus on what XTYPES provides, not the situation previous to XTYPES.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Does @try_contruct(TRIM) leave strings with valid UTF-8 and UTF-16?

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    This is related to https://issues.omg.org/issues/DDSXTY14-13, and it might actually be covered by it, but I can't read into the comments at the moment to see if this specific issue was mentioned. As mentioned in 7.2.2.2.1, strings should be either UTF-8 or UTF-16. @try_construct(TRIM) can cause strings to be truncated. If they are truncated in the middle of a UTF-8 multi-byte code point or UTF-16 surrogate pair, then it would leave invalid data at the end of the string. Ideally an implementation could read trim the strings intelligently, but the spec should say what the behavior is.

  • Reported: DDS-XTypes 1.3 — Wed, 5 Jun 2024 18:19 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Explain that string8 truncation needs to be UTF-8 aware

    Explain that string8 truncation needs to be UTF-8 aware

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Inheritance rule regarding keys is overly restrictive

  • Status: closed  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    The Resolution Summary of DDSXTY13-23 states:

    Structure types can inherit from other structure types as long as:

    • [...]
    • The derived type does not define any key fields.
      Is this really what we want to do. Will it break some definition where the "base type" is just being reused as a "header"?

    I propose to change the first sentence to

    • The derived type does not define any key fields if any of its ancestor types is non nested.

    This restores viability for the mentioned use case where the base type(s) are just being used as header(s).
    It hinges on the assumption that if all base types are nested then the question of assignability does not arise at the topic level.

  • Reported: DDS-XTypes 1.3 — Sun, 18 Aug 2024 09:43 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Remove restriction on defining keys on derived structures/unions

    Derived structures and unions should be allowed to define keys. However doing so would render the derived type not assignable to the base type.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Typos in DynamicData UML Diagrams


Section contains a duplicate sentence from the next section.

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    Sections are:

    7.3.1.9 Map Types
    Map types as described in this specification are fully compatible with the IDL constructs of the
    same name defined in the Extended Data-Types Building Block of [IDL].
    Structures as defined by this specification are fully compatible with the IDL constructs of the
    same name.
    7.3.1.10 Structure Types
    Structures as described in this specification are fully compatible with the IDL constructs of the
    same name.

    "Structures as defined by..." is duplicated twice.

  • Reported: DDS-XTypes 1.3 — Fri, 1 Sep 2023 20:42 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with issue covering typos

    Merge with issue covering typos

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Ambiguous definition and/or usage of PUSH(ORIGIN=0)

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Note: This issue was filed by Sam Nosenzo in RTF 3. As the RTF 3 is already close it has been copied to RTF4

    The description of PUSH states:
    ```
    Pushes the specified XCDR stream variable VARIABLE
    into the stack and sets the current value to <newvalue>.
    The notation <?> indicates that the new value can be
    chosen by the implementation.
    This action is reverted by the POP() operation
    ```
    However the first serialization rule that writes the HEADER calls

    `PUSH(ORIGIN=0)` after writing the ENCHEADER, even though it's already been set to 0 on initialization. PUSH(ORIGIN=0) is also called after writing PL_CDR headers. I'm confused as to what this is supposed to mean. Based off of the current definition of PUSH I would be lead to believe that it truly does set the origin equal to 0. However looking at it's usage I would think that PUSH(ORIGIN=0) should mean that the origin is reset to where the current offset is, and based of of what I've seen in PL_CDRv1 messages with 8 byte members, this has been a correct assumption.
    Another confusing element around the usage of PUSH is that I don't see POP used anywhere in the Serialization rules.

  • Reported: DDS-XTypes 1.3b1 — Thu, 21 Mar 2024 03:48 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Clarify the use of PUSH. Its really a set

    Change PUSH() to SET(). Delete references to POP()

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Clarify accessing discriminator of a DynamicData union

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    It's not clear how a user of a DynamicData object that represents a union gets the discriminator value. We derive the following:

    // see pgh 1 of 7.2.2.4.4.3 for use of "discriminator" as a magic string
    const MemberId id_disc = dyndata->get_member_id_by_name("discriminator"); 
    if (id_disc == MEMBER_ID_INVALID) { some error happened }
    // based on union_type_descriptor.discriminator_type->get_kind(), determine the type of the discriminator
    // in this example, let's say it's an IDL long
    int val;
    dyndata->get_int32_value(val, id_disc);
    

    It would be better for the spec to have a clearly defined way of getting a MemberId that represents the discriminator. It could be a new API in DynamicType or TypeDescriptor.

  • Reported: DDS-XTypes 1.3 — Mon, 8 Aug 2022 15:38 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Add clarification of accessing the discriminator

    Union discriminator is accessed using dynamic data API with the member ID 0

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Typo in DataRepresentationMask

  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Typo, it says

    @posiiton(2) XCDR2

    but should say

    @position(2) XCDR2

  • Reported: DDS-XTypes 1.3 — Thu, 25 Mar 2021 07:54 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with DDSXTY14-46

    Combine the issues correcting typos

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Annex C: BoundSeq IDL type not defined

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The IDL defined in Annex C uses the type BoundSeq as a member of TypeDescriptor, but BoundSeq is not defined in the spec.

  • Reported: DDS-XTypes 1.3 — Tue, 26 Jul 2022 18:01 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Add definition of BoundSeq to Annex C

    Add definition of BoundSeq to Annex C

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Integrate annotations for range/min/max with try_construct

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The range/min/max group of standard IDL annotations are not referenced in table 21 and its surrounding sections.

    It would seem like the try_construct behavior could be applied to range/min/max when the publisher and subscriber have different but compatible annotations.

  • Reported: DDS-XTypes 1.3b1 — Thu, 30 Sep 2021 14:45 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with DDSXTY14-80

    Merge with issue DDSXTY14-80 which is also about adding clarity on teh use of @min @max and @range.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Should the TypeObject mark key members as must understand

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The spec states that @key members are always "must understand" does this mean that when represented in a TypeObject the member should also have the "must understand" flag set or is it enough with it being marked with the "key" flag as this would already imply its must understand nature?

    Either way it should not impact assignability but it would impact the TypeId computation.

  • Reported: DDS-XTypes 1.3b1 — Tue, 21 Mar 2023 15:27 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Add language explaining the MemberFlag in TypeObject

    Explain how MemberFlag in TypeObject is used to encode the member attributes.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Description on how to encode Participant GUID in dds::rpc::RequestHeader seems wrong

  • Status: closed  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    Section 7.6.3.3.4 states the following sentence on how to encode the Participant GUID into the dds::rpc::RequestHeader:

    The Service instanceName that appears in the dds::rpc::RequestHeader shall be set to the string obtained by concatenating the prefix “dds.builtin.TOS .” With the 16-character string version of the DomainParticipant GUID encoded using hexadecimal digits with lower case letters. There shall be no “0x” ahead of the hexadecimal digits. For example, “dds.builtin.TOS.123456789abcdf0”

    This seems to imply that you need to encode the Participant GUID as a 16 digit hexadedecimal string, which wouldn't allow you to represent the entire GUID. Probably the 16 bytes do no intend to refer to the hexadecimal digits of the string representation, but rather to the 16 bytes of the GUID itself. A couple of paragraphs further down it refers to the DDS-RPC spec, where indeed the 16 byte restriction is not mentioned:

    The dds::rpc::RequestHeader in the TypeLookup_Request and the TypeLookup_Reply shall be set as specified in the [DDS-RPC] specification.

  • Reported: DDS-XTypes 1.3b1 — Mon, 20 Dec 2021 16:09 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Specify the GUID is encoded into 32 ascii hexadecimal characters

    Modify the proposal as suggested in issue comments

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Extensibility of inherited structures

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification should state the behavior if a derived type extensibility kind is specified to be different from that of its parent.

    Furthermore for usability we should specify the behavior if the derived type does not specify any extensibility kind. Does it 'inherit' that of the parent or is it assumed to be the 'default'.

    Current thinking: It is an error to have a derived structure specify a different extensibility kind than its parent. Leaving it unspecified sets the derived type extensibility type to that of your parent.

    Basically the serialization of the derived class does not add its own header.

  • Reported: DDS-XTypes 1.3b1 — Thu, 30 Sep 2021 15:28 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Specify behavior of inherited types without explicit extensibility annotations

    The rules say that derived unions/structures may leave the extensibility kind undefined or specify the same as the base_type. It does not explicitly say taht if unspecified it shall be defined to match the base_type extensibility. It should.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Encoding of TypeInformation in SEDP

  • Status: closed  
  • Source: Kongsberg Defence & Aerospace ( Dr. Ornulf Staff)
  • Summary:

    The encoding of the TypeInformation member in the builtin topics should be explicitly specified. There is a normative comment on using XCDR2 for v1.3 types in the IDL, but this can be interpreted not to apply in the context of the builtin topics which are otherwise XCDR1.

  • Reported: DDS-XTypes 1.3 — Thu, 17 Jun 2021 13:04 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    *Specify XCDR2 serialization *

    Specify TypeInformation uses XCDR2

  • Updated: Wed, 12 Aug 2026 16:39 GMT

7.4.3.5.3 doesn't define OPTIONS

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    This section should have an explanation or cross-reference to describe what <OPTIONS> is (used in 1st encoding rule in the section)

  • Reported: DDS-XTypes 1.3b1 — Tue, 24 Mar 2020 14:26 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Explain <OPTIONS> in Table 37 – Functions operating on objects and types

    Add an entry in Table 37 – Functions operating on objects and types for <OPTIONS>

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Default value and @default annotations

  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    IDL4 defines @default as a way to specify a custom default value for an IDL element, but DDS XTypes defines it own default mechanism, shouldn't the value of @default be used when set?

  • Reported: DDS-XTypes 1.3 — Wed, 21 Apr 2021 10:28 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with DDSXTY14-80

    DDSXTY14-80 also makes changes to the TypeObject so it is simpler to handle all these changes toguether

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Can structures contain constant declarations?

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.3.2.5.1 'Structures' states:

    Structures contain four kinds of declarations:
    • Applied annotations
    • Verbatim text
    • Members
    • Constants

    However section 7.3.1.10 'Structure Types' states:

    Structures as described in this specification are fully compatible with the IDL constructs of the same name.

    IDL (4.3) does not allow constant declarations inside structures. So these two statements are incompatible.

    Also the UML model in 7.2.2.4.4.2 'Structure Types' states structures contain only members. And constant declarations are not members.

    Therefore it seems like the text in Section 7.3.2.5.1 should be modified to remove the bullet about constants.

  • Reported: DDS-XTypes 1.3b1 — Wed, 10 Jun 2020 23:26 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Remove text that says that structures can contain constants.

    Change spec to make clear constant declarations cannot appear within declarations of structures.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

XTypes spec is missing topic names for TypeLookupService

  • Status: closed  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In section 7.6.2.3, that introduces the TypeLookupService, the datatypes used for exchanging TypeLookupRequests and TypeLookupResponse are introduced, and so are the endpoints used to exchange them.
    However, what is missing is the topic names used for the topics carrying these requests and their responses. Technically you might not need the topic names to build an interoperable implementation, because the endpoints are builtin endpoints and therefore don't need to be matched, but nevertheless, the topic will need to have a name and the name might as well be part of the spec.

  • Reported: DDS-XTypes 1.3 — Thu, 4 Jun 2020 20:51 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Provide topic names for the TypeLookup service

    Provide topic names for the TypeLookup service

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Confusing description of FINAL on 7.2.3 TypeExtensibilityandMutability

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    In this section there is a bullet stating:

    • A type may be FINAL, indicating that the range of its possible data values is strictly defined. In particular, it is not possible to add elements to members of collection or aggregated types while maintaining type assignability.

    This is confusing. What does it mean that " the range of its possible data values is strictly defined"?
    Moreover, it talks about collection types where Table 12 says that for these types the extensibility kind has no effect.

    It sis recommended that this bullet is rephrased to just say that members cannot be added, removed or reordered.

  • Reported: DDS-XTypes 1.3b1 — Sat, 4 Apr 2020 00:03 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Rephase description of FINAL

    State that final types may not be modified

  • Updated: Wed, 12 Aug 2026 16:39 GMT

TypeLookup IDL Inconsistency

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    TypeLookup IDL in 7.6.3.3.3 contains the following unsigned long constants in IDL:

    // computed from @hashid("getTypes")
    const unsigned long TypeLookup_getTypes_HashId = 0x018252d3;
    // computed from @hashid("getDependencies");
    const unsigned long TypeLookup_getDependencies_HashId = 0x05aafb31;
    

    However later in the IDL two unions called TypeLookup_Call and TypeLookup_Return which use those constants as branches are discriminated with a long. Since long is apparently specified by the RPC spec, then the type of the constants should be changed to long to match the unions.

    Other issues in this IDL:

    • TypeLookup_getTypes_Result and TypeLookup_getTypeDependencies_Result both use DDS_RETCODE_OK as an IDL constant. It should be DDS::RETCODE_OK (from the DDS core spec 2.3.3)
    • TypeLookup_Call and TypeLookup_Return both use IDL constants that end in the word "Hash" but should match the ones above (they are missing "Id")
    • TypeLookup_Reply contains a member of type RequestHeader which should be ReplyHeader
  • Reported: DDS-XTypes 1.3 — Tue, 10 Nov 2020 02:10 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    *Fix inconsistencies in section 7.6.3.3.3 (TypeLookup Types and Endpoints)*

    Fix the inconsistencies described in the issue description

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Ambiguous effect of using annotations on attributes with multiple declarators.

  • Status: closed  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    It is possible to put an annotation on an attribute with multiple declarators, like this:

    struct Foo {
      @key long x, y;
    };
    

    What is the effect of this? Does the annotation apply to both declarators? In that case, how do you interpret the following:

    struct Foo {
      @fieldid(0x01000) long x, y;
    };
    
  • Reported: DDS-XTypes 1.3b1 — Wed, 30 Sep 2020 14:49 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Clarify how applied annotations are handled for multiple declarator

    Specify that they either apply to all or result in an error.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Need to add an ignore_enum_literal_names in TypeConsistencyEnforcement QosPolicy

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The type assignability rules for Enumerated Types require knowledge of whether the literal names should be considered for assignability.

    Right now this can only be configured when the type is declared using the @ignore_literal_names annotation. However in some cases it may be necessary to change this behavior at run-time for a particular DataReader.

    To support this use-case it would be helpful to add a ignore_enum_literal_names field to the TypeConsistencyEnforcement QosPolicy

  • Reported: DDS-XTypes 1.3b1 — Sat, 2 Mar 2019 00:27 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with DDSXTY14-16

    Merge with DDSXTY14-16 they both address this annotation

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Be more precise on meaning of string lengths and bounds

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    In section 7.2.2.2.1.2.4 String<Char8> type
    The specification does not provide a description of the "length" and "bound" values shown in Figure 9.

    In the case of strings, specially String8, there is an ambiguity on whether the "bound" and "length" represent the number of characters, or the number of bytes in the UTF-8 encoding mentioned in 7.2.2.2.1.2.4, or something else.

    an interpretation of the length of the string.

  • Reported: DDS-XTypes 1.3b1 — Thu, 19 Mar 2020 20:23 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Clarify meaning of string bound and length

    Add wording to the sections on String<Char8> type and String<Char16> type that explain the string bound versus the length in characters/bytes

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Define Implied Keys Behavior

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    1. In 7.6.8, the algorithm for creating a KeyHolder states that:

    If there are any key members, then remove the non-key members from FooKeyHolder. Otherwise do not remove any members.

    This seems to say that if there are no fields marked as keys, leave all of them open to be able to be used as keys. That would be consistent with implied key behavior.

    2. There is an example of implied @key in Annex D, where the TopicData types specify BuiltinTopicKey_t as a key, but the single member of BuiltinTopicKey_t is not marked as a key.

    3. At the same time 7.2.2.4.4.4.8 says:

    If a given type has no members designated as key members, then the type—and any DDS Topic that is constructed using it as its type it—has no key.

    It also says that:

    In the event that the type K of a key member of a given type T itself defines key members, only the key of K, and not any other of its members, shall be considered part of the key of T.

    This doesn't go against implied keys, but would be a good place to mention them in addition to the previous sentence.

    4. 7.3.1.2.1.3 says that:

    To declare a member as part of the key, users shall apply the @key annotation...

    7.2.2.4.4.4.8 and 7.3.1.2.1.3 seem to have been written under the assumption that @keys can't be implied. If the specification actually requires this, which it appears that it does given Annex D, then it should say so in those two sections.

    Finally, a couple thoughts/questions came up about implied keys behavior since it is not defined in the spec:

    1. Given a situation like:

    @nested(TRUE)
    struct A

    { @key(FALSE) long a1; long a2; }

    ;

    @nested(FALSE)
    struct B

    { @key A b1; }

    ;

    Shouldn’t a2 be the only element of the key of B, because we’re explicitly saying a1 isn’t part of the key?

    2. Should implied key behavior (potentially including the behavior in the previous point) apply to union discriminators? For example:

    @nested(TRUE)
    union TestUnion switch (long)

    { // ... };

    @nested(TRUE)
    union KeyedTestUnion switch (@key long) { // ... }

    ;

    @nested(TRUE)
    union KeyedFalseTestUnion switch (@key(FALSE) long)

    { // ... }

    ;

    @nested(TRUE)
    struct A

    { TestUnion a1; // discriminator is implied to be part of the key of B KeyedTestUnion a2; // discriminator is explicitly part of the key of B KeyedFalseTestUnion a3; // Not part of the key of B }

    ;

    @nested(FALSE)
    struct B

    { @key TestUnion b1; // discriminator is implied to be part of the key @key KeyedTestUnion b2; // discriminator is explicitly part of the key @key KeyedFalseTestUnion b3; // Not part of the key, maybe an implementation could give a warning? @key A b4; }

    ;

  • Reported: DDS-XTypes 1.3b1 — Tue, 24 Mar 2020 13:53 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with DDSXTY14-38 and DDSXTY14-41

    Issues DDSXTY14-38 and DDSXTY14-41 cover similar ambiguities. Merge with those.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Implementation Defined Default Nested Behavior

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    7.3.1.2.1.7 Nested Types

    By default, aggregated types and aliases to aggregated types defined in IDL are not considered to be nested types.

    ...

    If not present on a module, the value defaults to that of the enclosing module. If a top -level module is not annotated, the default is FALSE.

    ...

    In addition to the above annotations, IDL compilers shall provide the means to change the default value for non-annotated top-level modules.

    Given the fourth sentence, the first and third sentences should also say the nested status of a non-annotated type is implementation defined.

  • Reported: DDS-XTypes 1.3b1 — Tue, 24 Mar 2020 13:55 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Specify the defailt nestedness for all types

    Be more clear about the default 'nested' value for all types.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Specify more clearly which types have a name and how it is constructed

  • Key: DDSXTY14-2
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.2.2.1 'Namespaces' states:

    Modules are namespaces whose contained named elements are types. The concatenation of module names with the name of a type inside of those modules is referred to as the type’s “fully qualified name.”

    This is not enough to fully determine the fully qualified name. How is the "concatenation" done? What character is used to separate the successive module names?

    For example what should be the fully-qualified name of the type described in in the following IDL?

    module A {
    module B {
      struct Foo {
        ...
      };
    };
    };
    

    Assuming "::" is used to separate namespaces it would be "A::B::Foo"

    The issue of type names is a bit broader. Currently it is not so clear that every type has a name. Is that really so? What about anonymous types defined within a structure?

    The definition of MemberDescriptor (7.5.2.7) which is used to describe members of a Structure seems to imply every type must have a name. This is because each MemberDescriptor has an associated DynamicType (7.5.2.7.10 'Property: type') which according to 7.5.2.7.10 it cannot be null. And the DynamicType::get_name() should return the name of the type.

    On the other hand Figure 5 seems to indicate only Modules and ConstructedTypes (according to Fig 5 these are: Alias, AggregateTypes, EnumeratedType, Collection) have a "ScopedIdentifier" which is their name.

    This would mean that PrimitiveTypes, StringType do not have a ScopeIdentifyer/name. This seems problematic,

    • PrimitiveTypes do seem to have a name as it is used when defining struct members of that type.
    • CollectionTypes do not seem to have a name.

    However nothing really says that typenames should be globally unique. They only need to be unique within a compilation unit...

  • Reported: DDS-XTypes 1.3b1 — Sun, 4 Aug 2019 20:29 GMT
  • Disposition: Resolved — DDS-XTypes 1.4b1
  • Disposition Summary:

    Specify which types have a "name" and how that is defined

    Update the UML model and Figures 4 & 5 to more properly indicate which types have a name.
    Also some types have a "Scoped Identifier" or fully-qualified name. Clarify whether this is the same as a typename or not.

    Define typenames for the primitive types, strings, and collection types.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Typo or editing issue

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    7.4.1.2.1 7th paragraph (maybe) / 3rd paragraph of page 126: : “The four bytes following the PID_EXTENDED and length shall be a serialized UINT32 value "eMemberHeader" that is constructed by combining four 1-bit flags with by the 28-bit member ID.”

    It seems like the second “by” should be removed.


    In 7.6.3.3.2 "Types reused from DDS-RPC" The first line in the IDL says

    /* END of definitions copied from DDS-RPC */

    It should say "BEGIN}" instead of "END".

  • Reported: DDS-XTypes 1.3b1 — Tue, 24 Mar 2020 14:13 GMT
  • Disposition: Duplicate or Merged — DDS-XTypes 1.4b1
  • Disposition Summary:

    Merge with other typo-resolving issues

    Merge with other typo-resolving issues

  • Updated: Wed, 12 Aug 2026 16:39 GMT

XCDR2 serialization of sequences of non-primitive elements

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    When serializing a sequences of non-primitive elements, the XTYPES spec requires serializing a DHEADER ahead of serializing the number of elements and each element. This is rule (12)

    Arrays of non-primitive elements also serializing the DHEADER but not the number of elements. This is rule (9)

    I think it would make sense to modify or at least relax these rules.
    At a minimum arrays and sequeces of enumerated types and bitmask types should not have a DHEADER as it does not add information beyond what is available knowing the number of elements and size of each element. That it, they should behave as primitives (basically they are integers).

    Additionally it may be better to not have the DHEADER at all for sequences and arrays. Or at least for sequences or arrays whose elements are final.

    Basically the "extensibility" of the sequence is already handled by having the number of elements and having a DHEADER adds nothing and makes types that contain sequences of FINAL incompatible with XCDR1. This is a side-effect that we did not want or anticipate. Otherwise types that are constructed from only FINAL types would be compatible between XCDR1 and XCDR2 (except for 8-byte aligned types).

  • Reported: DDS-XTypes 1.3b1 — Wed, 4 May 2022 22:43 GMT
  • Disposition: Deferred — DDS-XTypes 1.4b1
  • Disposition Summary:

    *Introduce XCDR3 with improved serialization *

    9/27/2023 We agreed that if a change was to be made introducing XCDR3 would be the cleanest approach.
    We took the action item to find what else people would like to improve in the serialization/deserialization process and bundle them all into the XCDR3 format.

    Regarding the approach we discussed the possibility to introduce the definition of a "fixed length vs variable length" type.
    These are types where the size of serialization is the same for all objects of that type.

    • This includes all primitive types.
    • This includes enumerated types or bitmask, or bitset?
    • Also final structures whose members recursively don't contain optional members, strings, sequences, maps, unions, or any appendable or mutable types, (future any type), or typedefs of the above.

    Given this definition we would not put DHEADER when serializing arrays/sequences of element-type that are "fixed-length" types.

    15/Dec/23 Erik Hendriks added a comment in DDSXTY14-56 suggesting that if we go to an XCDRV3, we might want to think about allowing @must_understand and @optional to match for @appendable types

    6/2025 further RTF discussion at the Denver meeting tentatively agreed that the identified changes are not sufficiently compelling to justify the complexity and interoperability issues that would be caused by having XCDR3 so we decided to close the issue as deferred. A future revision of the specification could consider doing this if sufficiently compelling serialization changes are identified.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

DynamicTypeSupport IDL defnition is invalid IDL

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    DynamicTypeSupport has the following IDL definition in Annex C:

    interface DynamicTypeSupport : TypeSupport {
      /* This interface shall instantiate the type FooTypeSupport
       * defined by the DDS specification where "Foo" is DynamicData.
       */
      /*static*/ DynamicTypeSupport create_type_support(
        in DynamicType type);
      /*static*/ DDS::ReturnCode_t delete_type_support(
        in DynamicTypeSupport type_support);
      DDS::ReturnCode_t register_type(
        in DDS::DomainParticipant participant,
        in ObjectName type_name);
      ObjectName get_type_name();
    };
    

    This definition can't be used in an XTypes implementation, at least in one using standard IDL. register_type and get_type_name can't use those names because a derived interface can't define operations that share names with ones in its base interfaces. This is described at the end of 7.4.3.4.3.2.1 in IDL 4.2. Another issue is the "static" operations. They get the point across as to what the author means but, they are also not usable as IDL can't define operations as static. DynamicTypeBuilderFactory and DynamicDataFactory also do this.

  • Reported: DDS-XTypes 1.3 — Fri, 28 Oct 2022 17:45 GMT
  • Disposition: Deferred — DDS-XTypes 1.4b1
  • Disposition Summary:

    Defer to next revision

    Defer to net revision as it is a complex issue that does not impact interoperabolity.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Add support for data-level compression during serialization

  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Larga data types or types that contain compressible data (e.g. strings) can benefit from using compression at serialization time.
    This would reduce the size required to store the data in the reader/writer caches as well as the bandwidth used to send the data.

    This is complementary to transport-level compression and has the advanatage that the data is only compressed once (at serialization, instead of every time it is sent) as well as reducing memory requirements.

  • Reported: DDS-XTypes 1.3b1 — Tue, 1 Feb 2022 19:08 GMT
  • Disposition: Deferred — DDS-XTypes 1.4b1
  • Disposition Summary:

    Defer to next revision

    There is significant complexity in specifying this and there are other urgent issues that need to be addressed so it seems sensible to defer this issue.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Dynamic Binding: equals() for DynamicType/DynamicTypeMember and related types

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Definition of equality is based on the "Properties" of the class as defined by the UML models (for example, Table 54). However, associations/aggregations (which are not properties) are just as important for equality. An example is the TypeDescriptor that's associated with each DynamicType. While not a Property, the state of TypeDescriptor is effectively part of the state of DynamicType.

    A related issue is that DynamicTypeMembers can only be equal "if they belong to the same type." This seems to be both unnecessary and prevents certain valid use cases. An application may want to determine if two different structs each have a string member of a certain name. Based on the Type System model (sect 7.2) it would be natural to apply the equals() operation on the members to check their logical equality independent of which struct they're declared in.

  • Reported: DDS-XTypes 1.3 — Mon, 8 Aug 2022 14:26 GMT
  • Disposition: Deferred — DDS-XTypes 1.4b1
  • Disposition Summary:

    Defer to next revision

    This is an enhancement that we could add in the next revisions as there are are more critical issues to address now.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

create_sample can't indicate failure

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Frederick Hornsey)
  • Summary:

    As defined create_sample can only return the sample object. This doesn't allow the API to indicate that there was an error unlike other calls in DDS. Other operations either can't normally fail, return an interface that can be null, or return a ReturnCode_t. At least in the C++ Language Mapping, create_sample can return a struct or a union by value, so it can't be null in those cases (section 5.11). I imagine this might be different in other mappings though.

  • Reported: DDS-XTypes 1.3 — Wed, 5 Jun 2024 17:28 GMT
  • Disposition: Deferred — DDS-XTypes 1.4b1
  • Disposition Summary:

    Defer to next revision

    Addressing this would require a change to teh DynamicData API which is mostly teh concern of the various Language Mappings

    Doing it here can provide useful guidance to those language API. But we should coordinate this carefully to not cause unnecessary incompatibilities.

    For this reasons I am recommending we defer to the next revision so we have more time to address this properly.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

bitset types not defined

  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Figure 16 defines bitset as another kind of aggregated type. One might assume that this has the semantics of an IDL4 bitset.

    The text after Figure 16 and the rest of the spec doesn't define how bitset works in the type system (assignability), type representation, and data representation.

  • Reported: DDS-XTypes 1.3b1 — Mon, 20 Mar 2023 19:15 GMT
  • Disposition: Deferred — DDS-XTypes 1.4b1
  • Disposition Summary:

    Defer to next revision

    Defer to next revison as meny vendors are not supporting this.

  • Updated: Wed, 12 Aug 2026 16:39 GMT

Add API for truely dynamically-typed Data Readers

  • Status: closed   Implementation work Blocked
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The current spec tells us (last paragraph of 7.6.1):

    Generic services (e.g., logger, monitor) may discover a topic associated with one or more types. Such services may be able to handle all representations of the types, without ever having type specific knowledge hard-coded into them.

    This paragraph leaves the reader wondering how to do so, and it seems like the answer would be found in 7.6.6 "Use of Dynamic Data and Dynamic Type." But there are limitations with the current DynamicTypeSupport as defined by 7.6.6 that makes this either difficult or impossible.

    The scenario described by 7.6.1, in the general case, is that a Topic is in use in a Domain by an arbitrary collection of DataReaders and DataWriters. Since we are only concerned with receiving data (for now) in a logger/monitor application, we'll consider the existing DataWriters. Each of these DataWriters may have a different type. The goal of our logger/monitor is to receive data from all of them.

    In the simple case of only one writer, the logger/monitor can get its type from Built-In Topics and create a DynamicTypeSupport for this type. Then create a DataReader based on this type support, which of course will use DynamicData as its data sample type.

    But in the case of multiple writers, there is no straightforward way to create a DataReader that can receive data samples from all writers. Creating multiple DataReaders isn't an attractive solution because it complicates the application code and it could lead to scenarios where the same data is received via multiple readers.

    It seems like what's needed is an AnyTypeSupport object with a similar role as DynamicTypeSupport's but without the need to provide it an immutable DynamicType on creation. Only DataReaders (no DataWriters) could be created using AnyTypeSupport. Its data sample type would also be DynamicData (and all DynamicData instances already carry with them a reference to their DynamicType). Its TypeIdentifier would be TK_NONE or a new constant designated for this purpose. All actual types written by DataWriters would be assignable to TK_NONE (it passes type compatibility checking trivially).

  • Reported: DDS-XTypes 1.3 — Thu, 28 Aug 2025 19:26 GMT
  • Disposition: Deferred — DDS-XTypes 1.4b1
  • Disposition Summary:

    Defer for next revision

    This is an interesting and important use-case but I am suggesting we defer it since it represents non-trivial new functionality that will delay significantly getting this revision completed.

  • Updated: Wed, 12 Aug 2026 16:39 GMT