idl4-cpp-1.0 — Open Items

Aggregate of idl4-cpp-1.0.en.md, generated by website/_tools/gen_open_items.py. No new content: every entry appears there as an item with its evidence.


2.1 Implementation: IDL -> C++ source per Chapter 7

Status: partial — the data-type transformation is live and renders every corpus case (or names its refusal); the compiler gate checks the generated headers. Chapter 7 is not fully met: the omg::types runtime (type traits, Any, fixed, sequence/string aliases) is missing, §7.4 interfaces run through the DDS-RPC binding rather than the generic form, and §7.4.1 exceptions and §7.6 valuetypes are shaped differently.

7.1.2 Reserved Names

Status: partial — collisions with C++ keywords are detected and rewritten, but with a trailing underscore (class -> class_), not with the leading underscore §7.1.2 mandates (_class). Detection is complete; the applied mapping deviates.

7.1.4 IDL Type Traits (Tab.7.1 and Tab.7.4-7.12)

Status: open — no omg::types namespace. grep -rl "omg::types" crates/ tools/ runtime/ endpoints/ finds only crates/corba-codegen/src/traits.rs (a Rust CORBA generator). The C++ column writes std:: types directly; no trait of Tables 7.1 and 7.4-7.12 is emitted.

7.2.3 Constants

Status: partial — numeric and boolean constants are emitted as inline constexpr. String, wstring and fixed constants are emitted as const char *, not as constexpr omg::types::string_view or std::string_view; the L prefix for wide literals is missing because wstring is held as UTF-8. No assertion covers the constant form directly.

7.2.4.1 Basic Types (Tab.7.2/7.3)

Status: partial — long -> std::int32_t is asserted (array, interface and verbatim tests), and octet/uint8 as well as wchar/ unsigned short collapse onto one type (tag test). The remaining table widths (short -> int16_t, long long -> int64_t, char, wchar, boolean, octet, float) have no assertion of their own. long double is mapped to zerodds::wire::Float128 instead of the C++ long double (§7.2.4.1.2, own item). cpp_primitive is exhaustive, so a missing primitive is a compile error.

7.2.4.1.2 long double -> long double

Status: open — cpp_primitive (crates/lang-rules/src/adapter/cpp.rs) maps long double to zerodds::wire::Float128.

7.2.4.2.1 omg::types::sequence/bounded_sequence

Status: open — neither omg::types::sequence<T> nor omg::types::bounded_sequence<T,N> nor the is_bounded/bound specialisations exist.

7.2.4.2.2 Strings -> std::string

Status: partial — string is held as std::string (an allowed form). There is no direct assertion for the data member (only the tag test shows that string and wstring fall onto the same C++ type); omg::types::string is missing.

7.2.4.2.2 omg::types::string/bounded_string

Status: open — no omg::types::string/bounded_string<N> aliases, no is_bounded/bound traits.

7.2.4.2.3 Wstrings

Status: partial — wstring is held as std::string with UTF-8, not as std::wstring and not as omg::types::wstring; the spec form is not met. No direct assertion.

7.2.4.2.3 omg::types::wstring/bounded_wstring

Status: open — no omg::types::wstring/bounded_wstring<N>, no traits.

7.2.4.2.4 Fixed Type

Status: open — the data-type column maps fixed<P,S> to std::string in crates/lang-rules/src/adapter/cpp.rs. The hand-written dds::core::Fixed<P,S> in crates/cpp/include/dds/core/Fixed.hpp is the DDS-PSM-Cxx runtime (a different spec) and offers only BCD round-trip plus string conversion, not the ~30 spec methods; omg::types::fixed and the digits/scale traits are missing.

7.2.4.3.2 Unions

Status: partial — the union is emitted as a class with a _d field and one field per branch (asserted: struct U {, std::int32_t _d;). The required accessor/modifier methods, the multi-label variant and _default() are missing; the branches are public fields.

7.2.4.3.3 Enumeration Type Traits

Status: open — the bit_bound/underlying_type specialisations are not emitted (see §7.1.4).

7.2.4.3.4 Constructed Recursive Types

Status: partial — forward declarations for aggregates and std::vector<T>/std::shared_ptr<T> allow self-reference; only the @external recursion case is evidenced (std::shared_ptr<::m::Node> next;). The general case (self-reference through sequence<Node> without @external) has no assertion of its own.

7.2.4.4 omg::types::array and dimensions

Status: open — omg::types::array and the dimensions trait are missing.

7.2.4.6 Naming Data Types

Status: partial — typedef is emitted as a cpp::Alias (C++ using); no assertion checks the alias declaration directly, and the corpus compile does not distinguish an alias form from a macro form.

7.3 Any -> omg::types::Any

Status: open — any is refused in crates/lang-rules/src/adapter/cpp.rs (cpp_value_type, TypeKind::Any) with NoLanguageForm (test an_any_member_is_refused_by_name_at_any_depth, also for sequence<any>). No omg::types::Any.

7.4 Interfaces -> C++ classes

Status: partial — interfaces are emitted through the DDS-RPC 1.0 §7.11.1 binding as classes with pure-virtual operations and attribute accessors (asserted: in by value/const ref, out/inout by reference, accessor named after the attribute). The binding follows DDS-RPC 1.0 and adds IAsync/Requester/Replier/Client/Service, which §7.4 does not know; omg::types::ref_type<T>/weak_ref_type<T> for interface parameters are missing.

7.4.1 Exceptions

Status: partial — an IDL exception is emitted as a struct with its members. The required class X : public std::exception derivation, what(), copy/move constructor, assignment operators and the explicit (member..., const char* what) constructor are entirely missing.

7.4.2 Interface Forward Declaration

Status: open — interface forward declarations are not emitted; the data-type adapter writes Forward only for Structure, Union and Valuetype. interface Foo; without a definition is refused by crates/lang-rules/src/adapter/interface.rs as ForwardWithoutDefinition (test crates/lang-rules/tests/interface_bindings.rs::a_forward_declaration_without_a_definition_is_e002).

7.5 Embedded declarations and static constexpr

Status: open — the DDS-RPC binding in crates/lang-rules/src/emit/interface_cpp.rs emits topic types and operation classes, but no nested type/exception/constant declarations inside the interface body and no static constexpr inside the class.

7.6 Valuetype -> abstract class

Status: partial — valuetype is treated like a struct: its members become fields. The required public/protected pure-virtual accessor/modifier methods, the <ValueTypeName>_factory class, the public-virtual inheritance and the operations of a supported interface are missing.

7.9/7.10 Components – Basic and Homes

Status: open — the transformation into equivalent IDL exists (crates/ccm/src/transform.rs, tests in crates/ccm/tests/equivalent_idl.rs), the C++ path of zerodds-idlc does not apply it: tools/idlc and crates/lang-rules do not depend on zerodds-ccm.

7.12/7.13 Components – Ports/Connectors and Template Modules

Status: partial — an instantiation of a template module becomes an ordinary module in the model, which the C++ column maps. Ports and connectors are not translated into intermediate IDL; own item.

7.12 Ports and connectors as intermediate IDL

Status: open — the C++ column does not translate porttype, port, mirrorport and connector into intermediate IDL.

7.14.1 Structures with Single Inheritance

Status: partial — base members are copied flat into the derived struct (all_members_of), not as struct Child : Base with public inheritance; the swap function for inherited members is missing. The flat form keeps the member order of the wire plan; own item.

7.14.1 Public inheritance and swap of the inherited members

Status: open — all_members_of (crates/lang-rules/src/adapter/cpp.rs) copies the base members flat into the derived structure; no base class, no swap for inherited members.

7.14.2 Union Discriminators

Status: partial — the discriminator runs through cpp_value_type and accepts any integral type; only switch (long) is asserted. wchar, octet, int8 and uint8 as discriminators have no assertion of their own.

7.14.3.1 Map Type Traits

Status: open — no omg::types::map/bounded_map and none of the four traits.

7.14.3.2 Bitsets

Status: partial — bitsets are emitted as a struct with separate integer members, packed in the codec, not as C++ bit-fields; base bit-fields are folded in flat, not through public inheritance. The spec requires bit-fields as the only members.

7.14.3.3 Bitmask Type

Status: partial — a bitmask is emitted as an integer alias (uint8/16/32/64) plus inline constexpr bit constants, not as a struct with an unscoped _flags enum, a private _value, constructors, !=/&=/^= operators and a call operator. The bit_bound/underlying_type traits are missing.

7.14.4 8-bit Integer Types (Tab.7.13)

Status: partial — octet/uint8 fall onto the same std::uint8_t (tag test). int8 -> std::int8_t has no assertion of its own.

7.14.5 Explicitly-Named Integer Types (Tab.7.14)

Status: partial — the explicit widths are mapped in cpp_primitive, but no assertion names int16/uint16/int32/uint32/int64/uint64 individually.

7.17.1 General Purpose: @optional

Status: open — no mapping writes std::optional<T>: the default mapping (psm) writes dds::core::optional<T> (DDS-PSM-Cxx), the option native a pointer T * (DDS-XTypes 1.3 §7.5.1.2.4.2), the option classic zerodds::classic::Optional<T>. The form of IDL4 to C++ 1.0 §7.17.1 is missing as a named option. Evidence of the forms that exist: crates/lang-rules/src/adapter/cpp_psm.rs (dds::core::optional<T>), crates/lang-rules/src/adapter/cpp.rs (T *), crates/lang-rules/src/adapter/cpp_classic.rs (zerodds::classic::Optional<T>); tests crates/lang-rules/src/adapter/cpp.rs::tests::an_optional_member_is_a_plain_pointer_and_not_a_second_field, crates/cpp/tests/generated_psm_roundtrip.cpp.

7.17.1 General Purpose: @value, @position, @id, @autoid, @extensibility

Status: partial — @value reaches the enumerator value (the adapter writes every value out) but is not asserted directly; @position hangs on the bitmask, which is itself partial (§7.14.3.3); @id, @autoid, @extensibility, @final, @mutable and @appendable are, as the spec intends, not carried into the C++.

7.17.2 Data Modeling: @key, @must_understand, @default_literal

Status: partial — @key and @must_understand have no impact, as the spec says. @default_literal is not evaluated: the member default takes the first enumerator, not the one marked @default_literal.

7.17.3 Units and Ranges: @default, @range, @min, @max, @unit

Status: open — no omg::types::ranged<T,min,max>, no setters (the data members are public fields) and therefore no std::out_of_range check for @range/@min/@max. @default is evaluated in the codec defaulter (crates/lang-rules/src/default_cpp.rs), but not as the C++ member initialiser of the generated struct.

7.17.4 Data Implementation: @bit_bound

Status: partial — for enums the underlying type is asserted; for bitmasks the adapter follows the same width rule, but the bitmask mapping is itself partial (§7.14.3.3).

7.17.4 Data Implementation: @external

Status: partial — @external T is held as std::shared_ptr<T> (asserted). The required deep copy in the copy constructor is missing: the compiler-generated copy constructor copies the shared_ptr shallowly, so the object is shared.

7.17.5 Code Generation: @verbatim

Status: partial — all six placements (BEGIN_FILE, BEFORE/BEGIN/END/AFTER_DECLARATION, END_FILE) and the languages c++, cpp, cxx as well as * are live (asserted). cc — explicitly named in Tab.7.19 — is missing from verbatim::aliases::CPP (&["c++", "cpp", "cxx"]).

7.17.6 Interfaces: @service, @oneway, @ami

Status: partial — @oneway (no reply topic, future<void> async) and @service (service name) are handled through the DDS-RPC binding; @ami has no path of its own. Tab.7.20 explicitly calls the impact platform-specific.

8.1 @cpp_mapping Annotation

Status: open — the annotation is not evaluated; the form of structures is chosen by the option --cpp-mapping per run (default psm: a class with accessors), not by @cpp_mapping per structure, and the default value of the annotation is STRUCT_WITH_PUBLIC_MEMBERS.

8.1.1 CLASS_WITH_PUBLIC_ACCESSORS_AND_MODIFIERS

Status: open — no path emits the annotated struct as a class with private members, accessors/modifiers and an initialising constructor. @cpp_mapping is not read by crates/lang-rules/src/adapter/cpp.rs.

A.1 CORBA-Specific Mappings

Status: open — no CORBA::traits<>/CORBA::servant_traits<> in the C++ column and no omg::types. crates/corba-codegen/src/traits.rs is a Rust CORBA generator, not this C++ binding.

Annex C: Compatibility Rules for C++98 and C++03

Status: open — an optional mapping; the PSM column (--cpp-mapping psm) targets C++17 (§7.1.3) and has no form for C++98 or C++03.

Annex D: IDL4 Mapping Rules for Classic C++ Mapping Specifications

Status: partial — ZeroDDS has a classic mapping per [OMG-C++] (--cpp-mapping classic, C++03), to which Annex D applies. The map class does not follow D.2.1.3.1 (own item); the other rules of D.2 are not checked one by one against the mapping. D.3 concerns the C++11 mapping [OMG-C++11], which ZeroDDS does not have.

Annex D.2.1.3.1 Maps in the classic mapping

Status: open — zerodds::Map (runtime/cpp/include/zerodds/map.hpp) has get_size, get_max_size, set_max_size, insert and erase with DDS::ReturnCode_t, but not maximum(), length(), clear(), insert_or_assign and the returns as Boolean.

idl4-cpp-1.0 — offene Punkte

Aggregat aus idl4-cpp-1.0.md, erzeugt von website/_tools/gen_open_items.py. Kein eigener Inhalt: jedes Item steht dort mit seinem Beleg.


2.1 Implementation: IDL -> C++-Quelltext nach Kapitel 7

Status: partial — die Datentyp-Transformation ist live und rendert jeden Korpusfall (bzw. benennt die Verweigerung); das Compiler-Gate prüft die erzeugten Header. Kapitel 7 ist aber nicht vollständig erfüllt: die omg::types-Laufzeit (Type Traits, Any, fixed, sequence/string- Aliase) fehlt, §7.4-Interfaces laufen über die DDS-RPC-Bindung statt über die generische Form, §7.4.1-Exceptions und §7.6-Valuetypes sind anders geformt.

7.1.2 Reserved Names

Status: partial — Kollisionen mit C++-Keywords werden erkannt und umgeschrieben, aber mit einem angehängten Unterstrich (class -> class_), nicht mit dem von §7.1.2 mandatierten vorangestellten Unterstrich (_class). Die Erkennung ist vollständig; das angewandte Mapping weicht ab.

7.1.4 IDL Type Traits (Tab.7.1 und Tab.7.4-7.12)

Status: open — kein omg::types-Namespace. grep -rl "omg::types" crates/ tools/ runtime/ endpoints/ findet nur crates/corba-codegen/src/traits.rs (ein Rust-CORBA-Generator). Die C++-Spalte schreibt std::-Typen direkt; kein Trait der Tabellen 7.1 und 7.4-7.12 wird emittiert.

7.2.3 Constants

Status: partial — numerische und boolesche Konstanten werden als inline constexpr emittiert. String-, Wstring- und Fixed-Konstanten werden als const char * ausgegeben, nicht als constexpr omg::types::string_view oder std::string_view; das L-Präfix für Wide- Literale fehlt, weil wstring als UTF-8 gehalten wird. Keine Assertion deckt die Konstantenform direkt.

7.2.4.1 Basic Types (Tab.7.2/7.3)

Status: partial — long -> std::int32_t ist assertiert (Array-, Interface- und Verbatim-Tests), und octet/uint8 sowie wchar/ unsigned short fallen auf denselben Typ (Tag-Test). Die übrigen Tabellenbreiten (short -> int16_t, long long -> int64_t, char, wchar, boolean, octet, float) haben keine eigene Assertion. long double wird auf zerodds::wire::Float128 abgebildet statt auf das C++ long double (§7.2.4.1.2, eigenes Item). cpp_primitive ist erschöpfend, ein fehlender Grundtyp ist ein Compile-Fehler.

7.2.4.1.2 long double -> long double

Status: open — cpp_primitive (crates/lang-rules/src/adapter/cpp.rs) bildet long double auf zerodds::wire::Float128 ab.

7.2.4.2.1 omg::types::sequence/bounded_sequence

Status: open — weder omg::types::sequence<T> noch omg::types::bounded_sequence<T,N> noch die is_bounded/bound- Spezialisierungen existieren.

7.2.4.2.2 Strings -> std::string

Status: partial — string wird als std::string gehalten (zugelassene Form). Für den Data-Member existiert keine direkte Assertion (nur der Tag-Test zeigt, dass string und wstring auf denselben C++-Typ fallen); omg::types::string fehlt.

7.2.4.2.2 omg::types::string/bounded_string

Status: open — keine omg::types::string/bounded_string<N>-Aliase, keine is_bounded/bound-Traits.

7.2.4.2.3 Wstrings

Status: partial — wstring wird als std::string mit UTF-8 gehalten, nicht als std::wstring und nicht als omg::types::wstring; die Spec- Form ist damit nicht erfüllt. Keine direkte Assertion.

7.2.4.2.3 omg::types::wstring/bounded_wstring

Status: open — kein omg::types::wstring/bounded_wstring<N>, keine Traits.

7.2.4.2.4 Fixed Type

Status: open — die Datentyp-Spalte bildet fixed<P,S> in crates/lang-rules/src/adapter/cpp.rs auf std::string ab. Die handgeschriebene dds::core::Fixed<P,S> in crates/cpp/include/dds/core/Fixed.hpp ist die DDS-PSM-Cxx-Laufzeit (eine andere Spec) und bietet nur BCD-Round-Trip plus String-Konvertierung, nicht die ~30 Spec-Methoden; omg::types::fixed und die digits/scale-Traits fehlen.

7.2.4.3.2 Unions

Status: partial — die Union wird als Klasse mit _d-Feld und einem Feld pro Zweig emittiert (assertiert: struct U {, std::int32_t _d;). Die geforderten Zugriffs-/Modifier-Methoden, die Multi-Label-Variante und _default() fehlen; die Zweige sind öffentliche Felder.

7.2.4.3.3 Enumeration Type Traits

Status: open — die bit_bound/underlying_type-Spezialisierungen werden nicht emittiert (siehe §7.1.4).

7.2.4.3.4 Constructed Recursive Types

Status: partial — Forward-Declarations für Aggregate und std::vector<T>/std::shared_ptr<T> erlauben Selbstreferenz; belegt ist nur der @external-Rekursivfall (std::shared_ptr<::m::Node> next;). Der allgemeine Fall (Selbstreferenz über sequence<Node> ohne @external) hat keine eigene Assertion.

7.2.4.4 omg::types::array und dimensions

Status: open — omg::types::array und der dimensions-Trait fehlen.

7.2.4.6 Naming Data Types

Status: partial — typedef wird als cpp::Alias (C++ using) emittiert; keine Assertion prüft die Alias-Deklaration direkt, und der Korpus-Compile unterscheidet eine Alias- nicht von einer Makro-Form.

7.3 Any -> omg::types::Any

Status: open — any wird in crates/lang-rules/src/adapter/cpp.rs (cpp_value_type, TypeKind::Any) mit NoLanguageForm abgelehnt (Test an_any_member_is_refused_by_name_at_any_depth, auch für sequence<any>). Kein omg::types::Any.

7.4 Interfaces -> C++-Klassen

Status: partial — Interfaces werden über die DDS-RPC-1.0-§7.11.1-Bindung als Klassen mit pure-virtual Operationen und Attribut-Accessoren emittiert (assertiert: in by value/const ref, out/inout by reference, Accessor nach Attributnamen). Die Bindung folgt DDS-RPC 1.0 und fügt IAsync/Requester/Replier/Client/ Service hinzu, die §7.4 nicht kennt; omg::types::ref_type<T>/ weak_ref_type<T> für Interface-Parameter fehlen.

7.4.1 Exceptions

Status: partial — eine IDL-Exception wird als struct mit ihren Membern emittiert. Die geforderte Ableitung class X : public std::exception, what(), Copy-/Move-Konstruktor, Zuweisungsoperatoren und der explizite (member..., const char* what)-Konstruktor fehlen vollständig.

7.4.2 Interface Forward Declaration

Status: open — Interface-Vorwärtsdeklarationen werden nicht emittiert; der Datentyp-Adapter schreibt Forward nur für Structure, Union und Valuetype. interface Foo; ohne Definition wird von crates/lang-rules/src/adapter/interface.rs als ForwardWithoutDefinition abgelehnt (Test crates/lang-rules/tests/interface_bindings.rs::a_forward_declaration_without_a_definition_is_e002).

7.5 Embedded Declarations und static constexpr

Status: open — die DDS-RPC-Bindung in crates/lang-rules/src/emit/interface_cpp.rs emittiert Topic-Typen und Operationsklassen, aber keine verschachtelten Typ-/Exception-/Konstanten- Deklarationen im Interface-Rumpf und kein static constexpr innerhalb der Klasse.

7.6 Valuetype -> abstrakte Klasse

Status: partial — valuetype wird wie ein struct behandelt: seine Member werden Felder. Die geforderten public/protected pure-virtual Accessor-/Modifier-Methoden, die <ValueTypeName>_factory-Klasse, die public-virtual Vererbung und die Operationen unterstützter Interfaces fehlen.

7.9/7.10 Components – Basic und Homes

Status: open — die Transformation in äquivalentes IDL gibt es (crates/ccm/src/transform.rs, Tests in crates/ccm/tests/equivalent_idl.rs), der C++-Pfad von zerodds-idlc wendet sie nicht an: tools/idlc und crates/lang-rules hängen nicht an zerodds-ccm.

7.12/7.13 Components – Ports/Connectors und Template Modules

Status: partial — eine Instanziierung eines Template Module wird im Modell zu einem gewöhnlichen Modul, das die C++-Spalte abbildet. Ports und Connectoren werden nicht in Intermediate-IDL übersetzt; eigenes Item.

7.12 Ports und Connectoren als Intermediate-IDL

Status: open — die C++-Spalte übersetzt porttype, port, mirrorport und connector nicht in Intermediate-IDL.

7.14.1 Structures with Single Inheritance

Status: partial — Basis-Member werden flach in den abgeleiteten Struct kopiert (all_members_of), nicht als struct Child : Base mit public inheritance; die swap-Funktion für geerbte Member fehlt. Die flache Form hält die Member-Reihenfolge des Wire-Plans; eigenes Item.

7.14.1 Public Inheritance und swap der geerbten Member

Status: open — all_members_of (crates/lang-rules/src/adapter/cpp.rs) kopiert die Basis-Member flach in die abgeleitete Struktur; keine Basisklasse, kein swap für geerbte Member.

7.14.2 Union Discriminators

Status: partial — der Discriminator läuft durch cpp_value_type und akzeptiert jeden integralen Typ; assertiert ist nur switch (long). wchar, octet, int8 und uint8 als Discriminator haben keine eigene Assertion.

7.14.3.1 Map Type Traits

Status: open — kein omg::types::map/bounded_map und keine der vier Traits.

7.14.3.2 Bitsets

Status: partial — Bitsets werden als Struct mit getrennten Integer-Membern emittiert und im Codec gepackt, nicht als C++-Bitfields; Basis-Bitfields werden flach einbezogen, nicht per public inheritance. Die Spec verlangt Bitfields als einzige Member.

7.14.3.3 Bitmask Type

Status: partial — eine Bitmask wird als Integer-Alias (uint8/16/32/64) plus inline constexpr-Bit-Konstanten emittiert, nicht als struct mit unscoped _flags-Enum, privatem _value, Konstruktoren, !=/&=/^=-Operatoren und Aufrufoperator. Die bit_bound/underlying_type-Traits fehlen.

7.14.4 8-bit Integer Types (Tab.7.13)

Status: partial — octet/uint8 fallen auf denselben std::uint8_t (Tag-Test). int8 -> std::int8_t hat keine eigene Assertion.

7.14.5 Explicitly-Named Integer Types (Tab.7.14)

Status: partial — die expliziten Breiten sind in cpp_primitive abgebildet, aber keine Assertion nennt int16/uint16/int32/uint32/ int64/uint64 einzeln.

7.17.1 General Purpose: @optional

Status: open — keine Abbildung schreibt std::optional<T>: die Standardabbildung (psm) schreibt dds::core::optional<T> (DDS-PSM-Cxx), die Option native einen Zeiger T * (DDS-XTypes 1.3 §7.5.1.2.4.2), die Option classic zerodds::classic::Optional<T>. Die Form von IDL4 to C++ 1.0 §7.17.1 fehlt als benannte Option. Belege der vorhandenen Formen: crates/lang-rules/src/adapter/cpp_psm.rs (dds::core::optional<T>), crates/lang-rules/src/adapter/cpp.rs (T *), crates/lang-rules/src/adapter/cpp_classic.rs (zerodds::classic::Optional<T>); Tests crates/lang-rules/src/adapter/cpp.rs::tests::an_optional_member_is_a_plain_pointer_and_not_a_second_field, crates/cpp/tests/generated_psm_roundtrip.cpp.

7.17.1 General Purpose: @value, @position, @id, @autoid, @extensibility

Status: partial — @value erreicht den Enumeratorwert (der Adapter schreibt jeden Wert aus), ist aber nicht direkt assertiert; @position hängt an der Bitmask, die selbst partial ist (§7.14.3.3); @id, @autoid, @extensibility, @final, @mutable und @appendable werden bestimmungsgemäß nicht ins C++ übertragen.

7.17.2 Data Modeling: @key, @must_understand, @default_literal

Status: partial — @key und @must_understand sind laut Spec ohne Impact. @default_literal wird nicht ausgewertet: der Member-Default nimmt die erste Enumeratorvariante, nicht die mit @default_literal markierte.

7.17.3 Units and Ranges: @default, @range, @min, @max, @unit

Status: open — kein omg::types::ranged<T,min,max>, keine Setter (die Datenmember sind öffentliche Felder) und damit keine std::out_of_range-Prüfung für @range/@min/@max. @default wird im Codec-Defaulter (crates/lang-rules/src/default_cpp.rs) ausgewertet, aber nicht als C++-Member-Initialisierer des generierten Structs.

7.17.4 Data Implementation: @bit_bound

Status: partial — für Enums ist das underlying type assertiert; für Bitmasken folgt der Adapter derselben Breitenregel, aber die Bitmask- Abbildung ist selbst partial (§7.14.3.3).

7.17.4 Data Implementation: @external

Status: partial — @external T wird als std::shared_ptr<T> gehalten (assertiert). Die geforderte tiefe Kopie im Copy-Konstruktor fehlt: der compiler-generierte Copy-Konstruktor kopiert den shared_ptr flach, das Objekt wird also geteilt.

7.17.5 Code Generation: @verbatim

Status: partial — alle sechs Platzierungen (BEGIN_FILE, BEFORE/BEGIN/END/AFTER_DECLARATION, END_FILE) und die Sprachen c++, cpp, cxx sowie * sind live (assertiert). cc — von Tab.7.19 ausdrücklich genannt — fehlt in verbatim::aliases::CPP (&["c++", "cpp", "cxx"]).

7.17.6 Interfaces: @service, @oneway, @ami

Status: partial — @oneway (keine Reply-Topic, future<void>-Async) und @service (Service-Name) werden über die DDS-RPC-Bindung behandelt; @ami hat keinen eigenen Pfad. Tab.7.20 erklärt den Impact ausdrücklich für plattformspezifisch.

8.1 @cpp_mapping Annotation

Status: open — die Annotation wird nicht ausgewertet; die Form der Strukturen wählt die Option --cpp-mapping je Lauf (Vorgabe psm: Klasse mit Zugriffsfunktionen), nicht @cpp_mapping je Struktur, und der Vorgabewert der Annotation ist STRUCT_WITH_PUBLIC_MEMBERS.

8.1.1 CLASS_WITH_PUBLIC_ACCESSORS_AND_MODIFIERS

Status: open — kein Pfad emittiert die annotierte Struct als Klasse mit privaten Membern, Accessoren/Modifikatoren und initialisierendem Konstruktor. @cpp_mapping wird von crates/lang-rules/src/adapter/cpp.rs nicht gelesen.

A.1 CORBA-Specific Mappings

Status: open — kein CORBA::traits<>/CORBA::servant_traits<> in der C++-Spalte und kein omg::types. crates/corba-codegen/src/traits.rs ist ein Rust-CORBA-Generator und nicht diese C++-Bindung.

Annex C: Compatibility Rules for C++98 and C++03

Status: open — eine optionale Abbildung; die PSM-Spalte (--cpp-mapping psm) zielt auf C++17 (§7.1.3) und hat keine Form für C++98 oder C++03.

Annex D: IDL4 Mapping Rules for Classic C++ Mapping Specifications

Status: partial — ZeroDDS hat eine klassische Abbildung nach [OMG-C++] (--cpp-mapping classic, C++03), für die Annex D gilt. Die Map-Klasse folgt D.2.1.3.1 nicht (eigenes Item); die übrigen Regeln von D.2 sind nicht einzeln gegen die Abbildung geprüft. D.3 betrifft die C++11-Abbildung [OMG-C++11], die ZeroDDS nicht hat.

Annex D.2.1.3.1 Maps in der klassischen Abbildung

Status: open — zerodds::Map (runtime/cpp/include/zerodds/map.hpp) hat get_size, get_max_size, set_max_size, insert und erase mit DDS::ReturnCode_t, aber nicht maximum(), length(), clear(), insert_or_assign und die Rückgaben als Boolean.