Issues for IDL to C++11 V1.4 (IDL2CPP11) Revision Task Force

To comment on any of these issues, send email to [email protected]. (Please include the issue number in the Subject: header, thusly: [Issue ###].) To submit a new issue, send email to [email protected].

List of issues (green=resolved, yellow=pending Board vote, red=unresolved)

List options: All ; Open Issues only; or Closed Issues only

Jira Issues

Issue 17420: In-place construction of structure types Jira Issue CPP1113-5
Issue 18149: RFP requirement on DDS-PSM-Cxx compatibility is violated Jira Issue CPP1111-1
Issue 18385: typo exists in section 6.21 Jira Issue CPP1111-2
Issue 18386: Lack of factory reference type Jira Issue CPP1111-3
Issue 18387: Add support for _this on local objects Jira Issue CPP1111-4
Issue 18388: Add missing implicit widening to any Jira Issue CPP1111-5
Issue 18389: Font issue Jira Issue CPP1111-6
Issue 18390: Extend IDL type traits for template meta programming Jira Issue CPP1111-7
Issue 18392: Remove _narrow methods Jira Issue CPP1111-8
Issue 18404: Invalid struct initialization example Jira Issue CPP1111-9
Issue 18405: Fixed type mapping should provide (explicit) operator bool Jira Issue CPP1111-10
Issue 18406: Meaning of (u)intN_t types unclear Jira Issue CPP1111-11
Issue 18418: Missing specification of assignment operators of valuetypes Jira Issue CPP1111-12
Issue 18433: std::ostream insertion underspecified Jira Issue CPP1111-13
Issue 18453: Early detection of bound violation on bounded types Jira Issue CPP1111-14
Issue 18463: CORBA::Exception should not use std::string type for name and repo_id Jira Issue CPP1111-15
Issue 18498: Minor typos Jira Issue CPP1111-16
Issue 18500: Use () instead of (void) Jira Issue CPP1111-17
Issue 18523: Introduce trait for local interface base type Jira Issue CPP1111-18
Issue 18527: Replace all _downcase/downcase with narrow Jira Issue CPP1111-19
Issue 18533: IDL2C++11 issue : CORBA dependency of the C++11 mapping Jira Issue CPP1113-6
Issue 18536: Small typos in servant reference section Jira Issue CPP1111-20
Issue 18578: Remove final for structured types Jira Issue CPP1111-21
Issue 18655: Relax constructor argument rules Jira Issue CPP1111-22
Issue 18656: Add namespace level swap Jira Issue CPP1111-23
Issue 18660: Remove user defined literal support Jira Issue CPP1111-24
Issue 18761: Errors on code snippes related to skeleton classes Jira Issue ITCR-3
Issue 18762: Code fragment should use skel class Jira Issue ITCR-4
Issue 18832: Question on unions default member Jira Issue ITCR-5
Issue 18849: Destructors of strong reference types should be public Jira Issue ITCR-6
Issue 18850: Contructor declarations in Servant code are wrong Jira Issue ITCR-7
Issue 19035: provide unique class name as mapping of PortableServer::Servant Jira Issue ITCR-8
Issue 19036: wrong return type for Foo::some_function() Jira Issue ITCR-9
Issue 19207: Add missing default initialization for valuetypes Jira Issue ITCR-10
Issue 19260: Valuebox should also have swap support Jira Issue ITCR-11
Issue 19498: Clarify valuetype factory mapping Jira Issue ITCR-12
Issue 19499: Make mapping of sequences more flexible Jira Issue CPP1113-7
Issue 19575: Missing move assignment operator in class ColorValue Jira Issue ITCR-14
Issue 19576: Move constructor of ValueBase incorrect Jira Issue ITCR-15
Issue 19577: usage of OBV trait should be improved Jira Issue ITCR-16
Issue 19580: Mention move constructor with abstract Jira Issue ITCR-17
Issue 19581: Destructor should just be virtual Jira Issue ITCR-18
Issue 19582: fixed member types use incorrect type Jira Issue ITCR-19
Issue 19672: _this for skeleton, not for implementation Jira Issue ITCR-41
Issue 19678: replace POA_B by adequate skeleton Jira Issue ITCR-42
Issue 19686: abstract interfaces with corrected skeleton name Jira Issue ITCR-43
Issue 19697: Skeleton class as consistent template parameter for CORBA::servant_traits Jira Issue ITCR-44

Issue 17420: In-place construction of structure types (idl2cpp11-rtf)

Click here for this issue's archive.
Nature: Enhancement
Severity: Significant
Summary:
There are two main motivations:      (1) Performance: IDL types may be large and not all IDL types may have C++11 mapping with efficient move constructors. For example, an IDL structure containing an array does not have an efficient move-ctor. Current mapping for an IDL struct type (section 6.13.1) requires  an explicit constructor accepting values for each member by value in the order they are specified in IDL. Although this method is sufficient in most cases, it is not optimal. Particularly, the types that don't support efficient move-ctor.       (2) Usability: Often C++11 standard library containers could be constructed using several alternatives. For instance, a string member in a struct may be constructed using any of its 9 constructors or a vector may be constructed using any of its 7 constructors. Currently, the IDL2C++11 specification allows construction of members of a structure using only two kinds of constructors: copy-ctor and move-ctor. (due to the pass-by-value rule mentioned above)      Resolution: The IDL2C++11 mapping of structures could be enhanced to construct large objects in-place. Provide a way to construct the member objects of a struct in-place using a perfect-forwarding constructor. The intent is to support all the ways of constructing all the member objects from the constructor of the parent object. Moreover, a perfect-forwarding constructor may eliminate the need for a move, which may lead to some performance improvements.      The solution relies on an idiom known as piecewise_construct idiom. It relies on a perfect-forwarding constructor that takes as many tuples as there are members in a struct. Each tuple encapsulates the parameters to construct one member. Tuples are needed because member ctor could take several parameters and the user may be interested in using them. For instance, using an allocator for std::vector. The user of the struct calls std::forward_as_tuple for each member object to group the parameters in a tuple. The special constructor simply forwards the tuples to the respective member.     The C++ standard library uses this idiom for std::map and std::unordered_map to construct complex objects in-place using the emplace operations. However, more general uses have been identified: http://cpptruths.blogspot.com/2012/06/perfect-forwarding-of-parameter-groups.html

Resolution: Deferred Without specific spec wording from someone who has implemented it, I don't think we can standardize this feature.
Revised Text:
Actions taken:
June 11, 2012: received issue
April 20, 2015: Deferred
July 8, 2015: closed issue

Discussion:
The issues proposes an extension to the construction of structured types. A vendor could already add this as performance improvement without being it as part of the specification. Before adding this to the specification this addition first have to be shown in a concrete product to make sure it is implementable and usable for users. This hasn�t been done by any vendor yet which made us decide to defer this issue to a future RTF.


Issue 18149: RFP requirement on DDS-PSM-Cxx compatibility is violated (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: ADLINK Technology Ltd (Angelo Corsaro, PhD., angelo.corsaro(at)adlinktech.com)
Nature: Revision
Severity: Critical
Summary:
The current mapping for struct violates the RFP requirements that mandated compatibility with the DDS-PSM-Cxx. Areas of incompatibilities include the use of the C++11 array type and the use of move operators.

Resolution: The revised submission explicitly mentioned that this requirement was not met because this is a C++11 language mappping, not focusing on C++03 which is the focus of the DDS-PSM-Cxx. Also in the mean time the DDS-PSM-Cxx has adopted the same mapping for arrays/enums and mentions move semantics when C++11 support is available. Given the fact this is a C++11 language mapping this issue has been closed without a change. Disposition: Closed, no change
Revised Text:
Actions taken:
October 10, 2012: received issue
October 22, 2013: closed issue

Issue 18385: typo exists in section 6.21 (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The following typo error exists in section 6.21:      Following text in spec  ... TypeCode reference constants, <type> refer to the local name of the type ...  should be  ... TypeCode reference constants, <type> refers to the local name of the type ...    Refs #2877

Resolution: The V1.0 spec doesn�t have this typo, so closing this with no change Disposition: Closed
Revised Text:
Actions taken:
January 23, 2013: received issue
October 22, 2013: closed issue

Issue 18386: Lack of factory reference type (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The specification defines IDL::traits<A>::factory_type as C++ trait for getting the base C++ class for the factory. It does lack a trait for passing a reference for a certain factory around.       To be added:  For a valuetype A, a strong reference to its valuetype factory is known as IDL::traits<A>::factory_ref_type. The weak object reference to its valuetype factory is known as IDL::traits<A>::weak_factory_ref_type.    Refs #2727

Resolution: Accepting this addition as proposed
Revised Text: To paragraph 6.18.10.2 add the following new sentence as 3rd line: The strong reference type of the value factory is known as IDL::traits<A>::factory_ref_type and its weak reference type is known as IDL::traits<A>::weak_factory_ref_type. The first paragraph than becomes as full text: All valuetypes that have initializer operations declared for them also have type-specific C++ value factory classes generated for them. For a valuetype A, the factory class can be retrieved using the IDL::traits<A>::factory_type trait. The strong reference type of the value factory is known as IDL::traits<A>::factory_ref_type and its weak reference type is known as IDL::traits<A>::weak_factory_ref_type. Each initializer operation maps to a pure virtual function in the factory class, and each of these initializers defined in IDL is mapped to an initializer function of the same name. Base valuetype initializers are not inherited, and so do not appear in the factory class. The initializer parameters are mapped using normal C++ parameter passing rules for in parameters. The return type of each initializer function is a reference to the created valuetype.
Actions taken:
January 23, 2013: received issue
October 22, 2013: closed issue

Issue 18387: Add support for _this on local objects (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
With the new IDL2C++11 mapping we can't create object references with new, we have to use the CORBA::make_reference<> factory method. In a servant we can use _this to get a reference to itself, but that is not available for local objects. With the old C++ binding people could just use the C++ this to get a _ptr to a local object, but that is not possible with the C++11 binding in general.      Proposal is to add to 6.24:      In order to get an object reference referring to an already created local object the _this() method must be used.       In the code part add as method      class LocalIF {  protected:  IDL::traits<LocalIF>::ref_type _this ();  };  Refs #2804

Resolution: Accepting this addition as proposed
Revised Text: Add to section 6.25, first paragraph, before the line �Here is an example of how to implement a local interface:� the following new sentence: Within the context of a request on a local object the _this() method allows the retrieval of the object reference for the target object handling that request. Add a new IDL interface as : local interface LocalIB { void if_op (in LocalIF an_f_arg); }; Update the C++ example by adding the _this to the class LocalIF (which itself was added by issue 18523): class LocalIF { protected: virtual ~LocalIF (); IDL::traits<LocalIF>::ref_type _this (); }; and change the class MyLocalIF to class MyLocalIF : public IDL::traits<LocalIF>::base_type { The complete C++ example than becomes: // C++ class LocalIF { protected: virtual ~LocalIF (); IDL::traits<LocalIF>::ref_type _this (); }; class MyLocalIF : public IDL::traits<LocalIF>::base_type { public: MyLocalIF (); virtual ~MyLocalIF(); void an_op(int32_t an_arg) override IDL::traits<LocalIB>::ref_type b_ref = ...; // obtain a reference to B // invoke if_op with a reference to this local object b_ref->if_op (this->_this ()); }; IDL::traits<LocalIF>::ref_type myref = CORBA::make_reference <MyLocalIF> ();
Actions taken:
January 23, 2013: received issue
October 22, 2013: closed issue

Issue 18388: Add missing implicit widening to any (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The description for Any lacks the support for implicit widening as it was available with the C++ mapping. Proposal is to add implicit widening to section 6.16.3. The following text is proposed to be added:      Any object reference, valuetype reference, or abstract references has to extractable as its base reference type from an Any.      Also in the last sentence of 6.13, any as bold should be Any with a capital A    Refs #2873

Resolution: Accepting this addition as proposed with the remark that 6.13 should be 6.17.3 and it talks about the Any C++ class, not the any IDL type.
Revised Text: Change the last paragraph of 6.17.3 from For strings, wide strings, and sequences applications are responsible for checking the TypeCode of the any to be sure that they do not overstep the bounds of the sequence, string, or wide string object when using the extracted value. to For strings, wide strings, and sequences applications are responsible for checking the TypeCode of the Any to be sure that they do not overstep the bounds of the sequence, string, or wide string object when using the extracted value. To the end of section 6.17.3 add a new paragraph with the text: Any object reference should be extractable from an Any as a base object reference. Any abstract reference should be extractable from an Any as a base object reference or as a base valuetype reference. Any valuetype reference should be extractable from an Any as a base valuetype reference
Actions taken:
January 23, 2013: received issue
October 22, 2013: closed issue

Issue 18389: Font issue (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
In section 6.25.6, in the line:      This guarantees that the POA skeleton class inherits only one version of each operation, and also allows optional  inheritance of implementations. In this example, the implementation of interface B reuses the implementation of interface  A:    The font of A should also be IDL type just as B

Resolution: Accepting this addition as proposed
Revised Text: Changed text This guarantees that the POA skeleton class inherits only one version of each operation, and also allows optional inheritance of implementations. In this example, the implementation of interface B reuses the implementation of interface A: So have the last A character style IDL
Actions taken:
January 23, 2013: received issue
October 22, 2013: closed issue

Issue 18390: Extend IDL type traits for template meta programming (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The specification defines IDL::traits<> as type trait, but uses it only for reference types.      We propose to extend IDL::traits<> as generic type trait for IDL2C++11. This type trait delivers traits with information coming from IDL.       For example object reference traits it can also deliver local and abstract as traits, which are booleans that indicate whether the IDL type was local or abstract.      For sequence we can add traits indicating the type of the element and in case of bounded sequences the bound.      The proposal is to add a new paragraph which describes the IDL type traits that are all available as part of IDL::traits<> for a specific IDL type.    Ref #2802

Resolution: Extending the IDL::traits<> with more types for template meta programming will be useful for the users that would like to program C++11 templates using the IDL defined types. Therefor a new set of type traits will be added to the specification.
Revised Text: see pages 14 - 17 of ptc/2013-05-34 for details
Actions taken:
January 23, 2013: received issue
October 22, 2013: closed issue

Issue 18392: Remove _narrow methods (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
Given interface T the specification defines IDL::traits<T>::narrow as a way to narrow to T. As convenience it also defined T::_narrow. The issue is that T::_narrow is implicitly linked to IDL::traits<T>::narrow and can cause confusion and possible misuse when other traits are added for more specific traits. We propose to remove T::_narrow from the specification completely, users must just use IDL::traits<T>::narrow

Resolution: Accepting this issue as proposed
Revised Text: see pages 18 - 19 of ptc/2013-05-34 for details
Actions taken:
January 29, 2013: received issue
October 22, 2013: closed issue

Issue 18404: Invalid struct initialization example (idl2cpp11-rtf)

Click
here for this issue's archive.
Nature: Clarification
Severity: Minor
Summary:
The example in the middle of the page starts with:      // C++  S s = {10};      but the struct mapping (6.13.1 p.23) clearly says that "an explicit constructor accepting values for struct each member" shall be provided. Above initialization context is a copy-initialization context and would require a non-explicit constructor. The example should be fixed to use a direct-initialization context instead, either:      // C++  S s{10};      or      // C++  S s = S{10};

Resolution: Accepting this issue as proposed
Revised Text: In 6.14.2 change the example S S = {10}; to S s{10};
Actions taken:
February 1, 2013: received issue
October 22, 2013: closed issue

Issue 18405: Fixed type mapping should provide (explicit) operator bool (idl2cpp11-rtf)

Click
here for this issue's archive.
Nature: Enhancement
Severity: Minor
Summary:
Given the specification of the class template Fixed provides      operator int64_t () const;  operator long double() const;      and      bool operator!() const;      This allows to test some Fixed instantiation within a boolean context as in a useful way as follows:      typedef IDL::Fixed<5,2> F;  F f = ...;  if (!f) { ... }      But the similar inverse form      if (f) { ... }      will cause an ambiguity error between the two conversion functions to int64_t and long double. User code is required to write the obfuscated form      if (!!f) { ... }      to realize the same thing. This is unfortunate and there is a simple means to solve this problem: The specification should add      explicit operator bool() const;      to the class template synopsis with the same semantics as negating operator!

Resolution: Accepting this issue as proposed. Also during the discussion it was proposed to add a namespace level to_string
Revised Text: In the class declaration of the Fixed template change the operator int64_t and long double to explicit operator int64_t () const; explicit operator long double() const; And change bool operator !() const to June 11, 2013 22 explicit operator bool() const; After the class declaration add the following namespace level to_string template <uint16_t digits, uint16_t scale> std::string to_string (const IDL::Fixed <digits, scale>&); Add the following explanation to the first paragraph after the code example The operator bool will return true when the fixed value is zero, in all other cases it will return false.
Actions taken:
February 1, 2013: received issue
October 22, 2013: closed issue

Issue 18406: Meaning of (u)intN_t types unclear (idl2cpp11-rtf)

Click
here for this issue's archive.
Nature: Clarification
Severity: Significant
Summary:
Section 6.5 (Table 6.1) loosely describes that the OMG IDL integer types are mapped to "a basic C++11 type" denoted by       int16_t int32_t int64_t uint16_t uint32_t uint64_t uint8_t      It doesn't really say, what these typedefs are supposed to be. Furthermore 6.5 (Table 6.2) describes the names      int16_t int32_t int64_t uint16_t uint32_t uint64_t uint8_t      as "keywords from the C++11 specification (ISO/IEC 14882:011)".      Surely there are *no* such keywords in C++11 (nor in C11 or C99) and never had been. What C++11 inherits from the C99 library specification are the typedefs      std::int16_t std::int32_t std::int64_t std::uint16_t std::uint32_t  std::uint64_t std::uint8_t      from header <cstdint>, but those are not keywords and they are library components that belong to namespace std. I *think* that the specification of the basic integer type mapping (6.5) intends to refer to these typedefs from <cstdint>, but this should be made clear in 6.5.    Also, section 6.30 should not declare them as C++11 keywords, even though these names need to be protected by a _cxx_ prefix as described by 6.2. Presumably a better name is needed (e.g. "protected C++11 names" or some such)

Resolution: Accepting this issue as proposed
Revised Text: Change the name of section 6.31 from �Keywords� to �Protected names� Change the first sentence to become: T able 6.14 lists all C++11 protected names including the keywords from C++11 specification (ISO/IEC 14882:2011) dated September 2011 Change last paragraph of 6.3 to June 11, 2013 24 To avoid C++ compilation problems, every use in OMG IDL of a C++ protected name as an identifier is mapped into the same name preceded by the prefix �_cxx_�. For example, an IDL interface named �try� would be named �_cxx_try� when its name is mapped into C++. For consistency, this rule also applies to identifiers that are derived from IDL identifiers. The complete list of C++ protected names can be found in �C++11 Protected names� on page 53. To the bottom of 6.6 add Each OMG IDL basic type is mapped to the listed C++ type as defined by C++11 or by the fixed-size integral types of the header <cstdint>.
Actions taken:
February 1, 2013: received issue
October 22, 2013: closed issue

Issue 18418: Missing specification of assignment operators of valuetypes (idl2cpp11-rtf)

Click
here for this issue's archive.
Nature: Clarification
Severity: Significant
Summary:
Section 6.17.2 is titled "Constructors, Assignment Operators, and Destructors" but does not say anything about assignment operators albeit the title promises to do so.      The following examples seems to indicate that both assignment operators are supposed to be deleted. This should be spelled out.    It also seems as if the maiing for interfaces as of 6.6 is intended to create class types with deleted copy/move assignment operators. This should also be made more clear.

Resolution: Accepting this issue as proposed
Revised Text: In section 6.18.2 change the first line to become: A C++ valuetype class defines a protected default constructor, protected copy constructor, protected move constructor, deleted copy assignment operator, deleted move assignment operator, and a protected virtual destructor.
Actions taken:
February 5, 2013: received issue
October 22, 2013: closed issue

Issue 18433: std::ostream insertion underspecified (idl2cpp11-rtf)

Click
here for this issue's archive.
Nature: Clarification
Severity: Significant
Summary:
The wording in 6.29 says      "For each IDL type (T) of type: [..] an ostream inserter with the following signature will be provided:      // C++  std::ostream& operator<<(std::ostream &, T);      For all other types an ostream inserter with the following signature will be provided:      // C++  std::ostream& operator<<(std::ostream &, const T&);"      1) This wording is not clear in which namespace the operator<< overload shall be provided. It could be within the global namespace or within the namespace of type T.       The prototype implementation that I have seen provides these operators in the global namespace which makes them behave irregular:       The reason is that overloaded operators such as these IO inserters are found by argument-dependent name-lookup. The lookup will consider all declarations that are found at the point of usage and will look in the associated namespaces of the operands to find them. Consider the following example:      #include <iostream>  #include <vector>  #include <iterator>      namespace n {    struct A {};  }  std::ostream& operator<<(std::ostream& os, n::A) { return os; }      int main() {    std::vector<n::A> v;    std::copy(v.begin(), v.end(), std::ostream_iterator<n::A>(std::cout));  }      This program will not compile, because the involved template cannot "see" the operator<< overload. TRhis is so, because it is provided in the global namespace, but the operands are in namespace std:: and namespace n, resp. Adding overloads to namespace std is not valid, therefore the only option is to add the operator<< overload to namespace n:      #include <iostream>  #include <vector>  #include <iterator>      namespace n {   struct A {};   std::ostream& operator<<(std::ostream& os, n::A) { return os; }  }      int main() {    std::vector<n::A> v;    std::copy(v.begin(), v.end(), std::ostream_iterator<n::A>(std::cout));  }      This works and lets the ostream operator<< of A::n behave normally.      This example was intended to demonstrate that the provided operator<< overloads should be provided in the same namespace as the declared mapped types from the IDL (that is within the IDL module). The wording in 6.29 should be clarified in that regard.      2) The second part of above wording,       "For all other types an ostream inserter with the following signature will be provided:      // C++  std::ostream& operator<<(std::ostream &, const T&);"      can be read to be applicable for the arithmetic IDL types (bool, short, wchar_t, char, double, uint32_t, ...) or typedefs thereof, but that surely cannot be intended, because that would result in a compiler ambiguity when user code would include such a mapping header and would attempt to print such an arithmetic type on any std::ostream, e.g.      #include <iostream>  #include "some_idl.h"      int main() {    std::cout << 12; // Error, ambiguity  }    The wording in 6.29 should make clear that *no* operator<< overloads shall be provided for the basic data types or for typedefs thereof.

Resolution: We had a detailed looked at the argument dependent lookup and what would technically be feasible. We also had users that wanted to define their own ostream operators and our spec defined methods were conflicting with that approach. Given that this feature was mostly focused on debugging systems, we decided to remove this section completely from the specification
Revised Text: Remove section 6.30 with the title std::ostream insertion completely from the spec
Actions taken:
February 6, 2013: received issue
October 22, 2013: closed issue

Issue 18453: Early detection of bound violation on bounded types (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Airbus Group (Mr. Oliver M. Kellogg, oliver.kellogg(at)airbus.com)
Nature: Enhancement
Severity:
Summary:
Addressee: IDL to C++11 1.1 RTF <[email protected]>  Nature: Enhancement  Summary: Early detection of bound violation on bounded types      In the IDL to C++11 Mapping v1.0 (formal/13-02-04), the sections  6.9, 6.10, and 6.11 describe the mapping for string, wstring, and  sequence types, respectively. These sections also address the bounded  variant of those types:      " Implementations must (at run time) detect attempts to pass a  [string|wstring|sequence] value that exceeds the bound as a parameter  across an interface. It must raise a BAD_PARAM system exception to  signal the error. "      In practice, the point at which such a value is passed into an interface  method may be far away from the assignment causing a bound violation,  which makes the error source hard to find.      I propose doing a bound check not only at interface methods but also  at the setter functions for struct, union, and valuetype members.      The section quoted above could thus be extended as follows:      " Implementations must (at run time) detect attempts to pass a   [string|wstring|sequence] value that exceeds the bound as a parameter   across an interface, or passed to a setter method of a struct, union,  or valuetype. It must raise a BAD_PARAM system exception to   signal the error. "      Furthermore, the mapping standard does not define the bound check  behavior for arrays and sequences of bounded types.  IMHO the mapping standard should make explicit that the bound check  shall be performed on each bounded-type element of an array or sequence.      Example:        // IDL    typedef string<12> string12_t;    typedef string12_t string_arr_t[2][3];    typedef sequence<string12_t, 4> string_seq_t;    struct struct_t {      string_arr_t sarr;      string_seq_t sseq;    }      The sarr() and sseq() setter methods generated for struct_t should  iterate over their input parameter and perform the bound check on  each element. Similar checks should happen in the explicit constructor  which accepts values for each struct member.    

Resolution: Adding the bounds check to the place where the bounded type is used leads to inconsistent behavior for users. After discussion we decided to map bounded types (string/wstring/sequence) to a distinct type and that this type could do a bounds check. The exact type doesn�t need to be standardized because bound types can only be used through a typedef in IDL and never are used directly by the programmer. Because the standard containers don�t have the concept of bounds enforcing a bound will be very hard to accomplish on all places.
Revised Text: Change section 6.10 to The OMG IDL unbounded string type is mapped to std::string. A bounded string type is mapped to a distinct type to differentiate from an unbounded string. This distinct type must deliver std::string semantics and support transparent conversion from bounded to unbounded and vice versa including support for move semantics. Implementations of the bounded string are under no obligation to perform a bounds check on the type itself. As a result, the programmer is responsible for enforcing the bound of bounded strings at run time. Implementations of the mapping are under no obligation to prevent assignment of a string value to a bounded string type if the string value exceeds the bound. Implementations must (at run time) detect attempts to pass a string value that exceeds the bound as a parameter across an interface. It must raise a BAD_PARAM system exception to signal the error. Change 6.11 to The OMG IDL unbounded wide string type is mapped to std::wstring. A bounded wide string type is mapped to a distinct type to differentiate from an unbounded wide string. This distinct type must deliver std::wstring semantics and support transparent conversion from bounded to unbounded and vice versa including support for move semantics. Implementations of the bounded wide string are under no obligation to perform a bounds check on the type itself. As a result, the programmer is responsible for enforcing the bound of bounded wstrings at run time. Implementations of the mapping are under no obligation to prevent assignment of a string value to a bounded wstring type if the wstring value exceeds the bound. Implementations must (at run time) detect attempts to pass a wstring value that exceeds the bound as a parameter across an interface. It must raise a BAD_PARAM system exception to signal the error. And the first paragraph of 6.12 to An unbounded sequence is mapped to a C++ std::vector. A bounded sequence is mapped to a distinct type to differentiate from an unbounded sequence. This distinct type must deliver std::vector semantics and support transparent conversion from bounded to unbounded and vice versa including support for move semantics. As a result, the programmer is responsible for enforcing the bound of bounded sequences at run time. Implementations of the mapping are under no obligation to prevent assignment of a sequence to a bounded sequence type if the sequence exceeds the bound. Implementations must at run time detect attempts to pass a sequence that exceeds the bound as a parameter across an interface. When an implementation detects this error, it must raise a BAD_PARAM system exception to signal the error. Change the example of paragraph 6.12 to // IDL typedef sequence<T> V1; // unbounded sequence typedef sequence<T, 2> V2; // bounded sequence typedef sequence<V1> V3; // sequence of sequences // C++ typedef std::vector <T> V1; typedef IDL::bounded_vector <T, 2> V2; typedef std::vector <V1> V3;
Actions taken:
February 13, 2013: received issue
October 22, 2013: closed issue

Issue 18463: CORBA::Exception should not use std::string type for name and repo_id (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Enhancement
Severity: Minor
Summary:
CORBA::Exception should not use std::string type for name and repo_id for 2 reasons:      1. C++ standard conformance; member types like std::string are discouraged because their constructors may throw exceptions where std::exception and derivatives are expected not to throw exceptions themselves  2. (minor) performance; using std::string these member values are unnecessarily copied while they immutable constant strings only ever read, never mutated      Changing the members to const char* values makes CORBA::Exception and the CORBA::SystemException classes optimal and c++ standard conformant.      This will not be the case for CORBA::UserException derivatives as these may have IDL defined attributes having IDL defined types which may definitely throw exceptions. However the ORB should be expected to handle situations where creating user exceptions unexpectedly throws another exception.    Refs #2958

Resolution: Update exception as proposed. During the discussion also it was proposed to define what() as noexcept which also has been done
Revised Text: Update exception as proposed. During the discussion also it was proposed to define what() as noexcept which also has been done Revised text: Change in 6.20 in the exception class the methods _name, _rep_id and what to virtual const char* _name() const; virtual const char* _rep_id() const; virtual const char* what() const noexcept override; Also in 6.20 after the sentence: The _name() function returns the unqualified (unscoped) name of the exception. The _rep_id() function returns the repository ID of the exception. Add the following text to describe the return type of the _name and _rep_id functions. Both return a pointer to a c-string with content related to the exception. This is guaranteed to be valid at least until the exception object from which it is obtained is destroyed or until a non-const member function of the exception object is called.
Actions taken:
February 18, 2013: received issue
October 22, 2013: closed issue

Issue 18498: Minor typos (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
2.1 refers to ISO/IEC 14822:2011 (which should be 14882:2011)      6.30 instead refers to ISO/IEC 14882:011 (again should be 14882:2011)      the table in 6.30 contains typos (alinas, alineof, constrexpr), names  that aren't keywords (int32_t, ...) and misses some keywords  (noexcept, char16_t, char32_t).

Resolution: Accepting this issue as proposed
Revised Text: see pages 33/34 of ptc/2013-05-34 for details
Actions taken:
February 24, 2013: received issue
October 22, 2013: closed issue

Issue 18500: Use () instead of (void) (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The specification uses in some examples like in 6.13.1 the construct "(void)" for a method with no arguments. This is old style, it should use "()"

Resolution: Accepting this issue as proposed
Revised Text: In 6.14 change the accessors from void A (T); T A (void) const; T& A (void); to void A (T); T A () const; T& A (); And from void A (const T&); void A (T&&); const T& A (void) const; T& A (void); to void A (const T&); void A (T&&); const T& A () const; T& A (); And in 6.14.1 change the class Variable to // C++ class Variable { public: Variable (); ~Variable (); Variable (const Variable&); Variable (Variable&&); Variable& operator= (const Variable& x); Variable& operator= (Variable&& x); explicit Variable (std::string name); void name (const std::string& _name); void name (std::string&& _name); const std::string& name () const; std::string& name (); }; And in 6.18.4 change the val2 methods of class OBV_Example to virtual void val2 (int32_t); virtual int32_t val2 () const; virtual int32_t& val2 (); In 6.20 change the constructor for Exception from Exception(void); to Exception();
Actions taken:
February 25, 2013: received issue
October 22, 2013: closed issue

Issue 18523: Introduce trait for local interface base type (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Revision
Severity: Minor
Summary:
The specification uses IDL::traits<T> for everything related to interface T, but for a local interface we just use T as base class. Proposal is to use IDL::traits<T>::base_type as base type trait for the local object implementation. This makes everything related to interfaces available through IDL::traits<T>

Resolution: Accepting this issue as proposed
Revised Text: In section 6.25 change the first paragraph from The C++ mapping of LocalObject is a class derived from Object that is used as a base class for locality constrained object implementations. The class mapping the interface should be (indirectly) derived from LocalObject and have the same name as the interface. to The C++ mapping of LocalObject is a class derived from Object that is used as a base class for locality constrained object implementations. The class mapping the interface should be (indirectly) derived from LocalObject and must be available as IDL::traits<>::base_type. Also change the class declaration MyLocalIF from class MyLocalIF : public LocalIF { to class MyLocalIF : public IDL::traits<LocalIF>::base_type {
Actions taken:
March 4, 2013: received issue
October 22, 2013: closed issue

Issue 18527: Replace all _downcase/downcase with narrow (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
As done for the interfaces already, we propose to remove _downcase/_narrow for abstract/valuetype and only support IDL::traits<>::narrow. In the spec this has to be updated in text and code.

Resolution: Accepting this issue as proposed
Revised Text: In 6.18.3 change the last section from As part of the valuetype traits IDL::traits<>::downcast is provided. This method is also provided as a static _downcast function by each valuetype class. These methods provides a portable way for applications to cast down the C++ inheritance hierarchy. If a nil reference is passed to one of these operations, it returns a nil reference. Otherwise, if the valuetype instance referenced to by the argument is an instance of the valuetype class being downcast to, a reference to the downcast-to class type is returned. If the valuetype instance pointed to by the argument is not an instance of the valuetype class being downcast to, a nil reference is returned. to As part of the valuetype traits IDL::traits<>::narrow is provided. This method provides a portable way for applications to cast down the C++ inheritance hierarchy. If a nil reference is passed to one of these operations, it returns a nil reference. Otherwise, if the valuetype instance referenced to by the argument is an instance of the valuetype class being narrowed to, a reference to the narrowed-to class type is returned. If the valuetype instance pointed to by the argument is not an instance of the valuetype class being narrowed to, a nil reference is returned. In section 6.18.10.1 change To allow the implementation to create value instances required during unmarshaling, the ValueFactoryBase class provides the create_for_unmarshal pure virtual function. The function is private so that only the implementation, through implementation-specific means (e.g., via a friend class), can invoke it. Applications are not expected to invoke the create_for_unmarshal function. Derived classes shall override the create_for_unmarshal function and shall implement it such that it creates a new value instance and returns a reference to it. Since the create_for_unmarshal function returns a reference to ValueBase, the caller may use the downcasting functions supplied by value types to downcast the reference back to a reference to a derived value type. to To allow the implementation to create value instances required during unmarshaling, the ValueFactoryBase class provides the create_for_unmarshal pure virtual function. The function is private so that only the implementation, through implementation-specific means (e.g., via a friend class), can invoke it. Applications are not expected to invoke the create_for_unmarshal function. Derived classes shall override the create_for_unmarshal function and shall implement it such that it creates a new value instance and returns a reference to it. Since the create_for_unmarshal function returns a reference to ValueBase, the caller may use the narrow function supplied by the value type IDL trait to narrow the reference back to a reference to a derived value type. In 6.18.3 change the last paragraph to As part of the valuetype traits IDL::traits<>::narrow is provided. This method provides a portable way for applications to cast down the C++ inheritance hierarchy. If a nil reference is passed to one of these operations, it returns a nil reference. Otherwise, if the valuetype instance referenced to by the argument is an instance of the valuetype class being narrowed to, a reference to the narrowed-to class type is returned. If the valuetype instance pointed to by the argument is not an instance of the valuetype class being narrowed to, a nil reference is returned. In 6.18.4 remove the _downcast method from the class Example In 6.18.5 remove the _downcast method from the class ValueBase In 6.18.7.2 remove the first bullet saying �A public static _downcast function� In 6.18.7.2 remove the _downcast method from the ColorValue class
Actions taken:
March 5, 2013: received issue
October 22, 2013: closed issue

Issue 18533: IDL2C++11 issue : CORBA dependency of the C++11 mapping (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: THALES (Ms. Nawel Hamouche, nawel.hamouche(at)thalesgroup.com)
Nature: Uncategorized Issue
Severity:
Summary:
A big effort have been done to remove CORBA dependency from the IDL2C++11 mapping, but it still specifies a CORBA semantic to the IDL   interfaces and user exceptions. In 6.6.4, it is said "Conceptually, the Object class in the CORBA module is the base interface type for all objects;" this assertion breaks all that efforts. I think the semantic of IDL interfaces should be abstracted by defining a middleware-independent Object type as the super type of all IDL interfaces, it could be IDL::Object. Likewise, CORBA::UserException and CORBA::SystemException could be abstracted by defining IDL::UserExeption and IDL::SystemException.  Looking to the IDL3.5 specification, it is true that this specification is still tied to CORBA, but special care has been done to separate between the syntactical construct and its semantic. For instance, it is said 'See the CORBA 3.2 specfication Section 10.2 �Semantics of Abstract Interfaces� for CORBA implementation semantics associated with abstract interfaces.'. It means that there could be other semantics than CORBA.  I would suggest the following changes in the IDL2CPP11 specification :  - To introduce IDL::Object, IDL::LocalObject, IDL::UserExeption and IDL::SystemException.  - To not consider an IDL interface as a CORBA Object and rephrase section 6.6.4 accordingly.  - To not consider a user exception as a CORBA exeption and rephrase section 6.19 accordingly.  - To group all CORBA-dependent mappings and APIs in one section "CORBA mapping". This section would include :      6.16 Mapping for the Any Type      6.17 Mapping for Valuetypes      6.18.1 Abstract Interface Base      6.21 TypeCode      6.22 ORB      6.23 Object      6.24 LocalObject      ... until 6.28  

Resolution: Deferred Deferred to future RTF
Revised Text:
Actions taken:
March 7, 2013: received issue
April 20, 2015: Deferred
July 8, 2015: closed issue

Issue 18536: Small typos in servant reference section (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
Two small typos in sectin 6.25.3:  aks CORBA::weak_servant_reference<>   to   aka CORBA::weak_servant_reference<>       Than   Foo some_function()  to  Foo::some_function()

Resolution: Change text as proposed
Revised Text: Chage aks CORBA::weak_servant_reference<> to aka CORBA::weak_servant_reference<> And change Foo some_function() to Foo::some_function()
Actions taken:
March 8, 2013: received issue
October 22, 2013: closed issue

Issue 18578: Remove final for structured types (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The mapping defines the mapping of IDL struct/union to a final class. The work "final" should be removed from the IDL to C++11 language mapping because it will prevent the implementation of the DDSXTypes Type Extensibility.

Resolution: Accepting this issue as proposed
Revised Text: In 6.3 remove �final� from class E In 6.14 change the first line from The mapping for structured types is a final C++ class with a default constructor, a copy constructor, a move constructor, an assignment copy operator, an assignment move operator, and a destructor. to The mapping for structured types is a C++ class with a default constructor, a copy constructor, a move constructor, an assignment copy operator, an assignment move operator, and a destructor. In 6.14.1 change the first line of An OMG IDL struct maps to a final C++ class, with each OMG IDL struct member mapped to a set of corresponding member methods. to An OMG IDL struct maps to a C++ class, with each OMG IDL struct member mapped to a set of corresponding member methods. In 6.14.1 remove final from class Variable In 6.14.2 change the first line from A union maps to a final C++ class with accessor functions for the union members and discriminant. For each member a set of accessors must be provided as described in �Mapping for Structured T ypes� on page 14. to A union maps to a C++ class with accessor functions for the union members and discriminant. For each member a set of accessors must be provided as described in �Mapping for Structured T ypes� on page 14. In 6.14.2 remove final from class S and U In 6.18.1 remove final from class S
Actions taken:
October 22, 2013: closed issue
March 22, 6013: received issue

Issue 18655: Relax constructor argument rules (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
Currently the std::array doesn't have an efficient move constructor, passing an array by value to the constructor of a valuetype/struct isn't efficient. Instead of adding an exception to the spec we propose to relax the spec so that it just mentions that the constructor must be there, but not that arguments have to be passed by value, that is up to the implementor to decide

Resolution: We remove the restriction that the arguments have to be passed by value to the constructor of a structured type. This is a way implementations can deliver optimizations if needed. This change will not impact any user code in terms of portability
Revised Text: In 6.14.1 remove �by value� in the second line In 6.18.2 remove the last line saying �All parameters for the member initializer constructor are passed by value.�
Actions taken:
April 12, 2013: received issue
October 22, 2013: closed issue

Issue 18656: Add namespace level swap (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
Everywhere where a specialization of std::swap is mentioned also mention the need for a namespace level swap

Resolution: Accepting this issue as proposed
Revised Text: Change last line of 6.14 from A specialization of std::swap<> must be provided to exchange the values of two unions in an efficient matter. to A namespace level swap and a specialization of std::swap<> must be provided to exchange the values of two unions in an efficient matter. Change last line of 6.14.1 from A specialization of std::swap<> must be provided to exchange the values of two unions in an efficient matter. to A namespace level swap and a specialization of std::swap<> must be provided to exchange the values of two unions in an efficient matter. Change last line of 6.7.1 from For all reference types a specialization of std::swap<> must be provided to exchange the values of two references in an efficient matter. to For all reference types a namespace level swap and a specialization of std::swap<> must be provided to exchange the values of two references in an efficient matter.
Actions taken:
April 12, 2013: received issue
October 22, 2013: closed issue

Issue 18660: Remove user defined literal support (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The fixed mapping uses operator"" and _fixed as user defined literal. This doesn't work with a C++ template, only with a class, so the usage of user defined literals should be removed

Resolution: The usage of operator�� and _fixed will be removed from the specification
Revised Text: The usage of operator�� and _fixed will be removed from the specification Revised text: In 6.15 change the line The Fixed(std::string&) constructor and Fixed operator � � converts a string representation of a fixedpoint literal, with an optional leading sign (+ or -) into a real fixed-point valueto The Fixed(std::string&) constructor converts a string representation of a fixed-point literal, with an optional leading sign (+ or -) into a real fixed-point value And change the example C++ from F f1 = 0.1_fixed; F f2 = 0.05_fixed; F f3 = -0.005_fixed; to F f1 (�0.1�); F f2 (�0.05�); F f3 (�-0.005�);
Actions taken:
April 12, 2013: received issue
October 22, 2013: closed issue

Issue 18761: Errors on code snippes related to skeleton classes (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
There is an error in 6.25.6 related to the skeleton classes. The skeleton classes should derive from each other, not from the traits, so it should be as below, also C_skel is lacking.      // C++  class A_skel : public virtual PortableServer::ServantBase {};  class B_skel : public virtual A_skel {};  class C_skel : public virtual A_skel {};  class D_skel : public virtual B_skel, public virtual C_skel {};      The other code bits in this section also have to be checked and see if they are ok.

Resolution: Correct skeleton inheritance The traits shouldn't be used in this example, those are for user code.
Revised Text: Change the code in 6.26.6 from: // C++ class A_skel : public virtual CORBA::servant_traits<A>::base_type { ... }; class B_skel : public virtual CORBA::servant_traits<B>::base_type { ... }; class D_skel : public virtual CORBA::servant_traits<B>::base_type, public CORBA::servant_traits<C>::base_type { ... }; to the following, the base of A_skel is implementation defined, is up to the implementation to specifiy, a little bit earlier in this section we do something similar class A_skel : public virtual ... { ... }; class B_skel : public virtual A_skel { ... }; class D_skel : public virtual B_skel, public virtual C_skel { ...};
Actions taken:
June 6, 2013: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 18762: Code fragment should use skel class (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
    The code snippet for the _this method should be using the A_skel class which is derived from PortableServer::ServantBase, not the impl class

Resolution: Code fragment should use skel class After carefully reviewing the specification and comparing it with our implementation we came to the conclusion that this issue is not correct. The specification is correct and nothing has to be changed in this chapter.
Revised Text:
Actions taken:
June 7, 2013: received issue
April 20, 2015: Closed; No Change
July 8, 2015: closed issue

Issue 18832: Question on unions default member (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: THALES (Ms. Nawel Hamouche, nawel.hamouche(at)thalesgroup.com)
Nature: Uncategorized Issue
Severity:
Summary:
In the section 6.14.2 on union mapping, it says :  "If there is a default case specified, the union is initialized to this default case. In case the union has an implicit default member it is initialized to that case. In all other cases it is initialized as empty."      I don't get the meaning of "empty" and it doesn't seem to be defined. For example, if we have a union with a boolean discriminator which defines the two cases true and false, what happens if we read one of the fields or if we call _d (with or without parameter)? Should they all throw BAD_PARAM?  

Resolution: Improve description of union After some prototyping and looking at the normal C+11 unions we propose to initialize the union in all other cases to the first discriminant in IDL, this is matching C+11 unions
Revised Text: In section 6.14.2 change the text In all other cases it is initialized as empty. to In all other cases it is initialized to the first discriminant value specified in IDL.
Actions taken:
July 25, 2013: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 18849: Destructors of strong reference types should be public (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Marcel Smit, nobody)
Nature: Uncategorized Issue
Severity: Minor
Summary:
The spec dictates that the destructor of a strong reference type should be protected. Implementing this will lead to compile errors. Seems that this is a left over from the beta 1 spec.

Resolution: Destructor of reference types should be public Reference types just have a regular destructor, not protected, else they can't be put on the stack.
Revised Text: Remove the following sentence from section 6.7.1, no need to explictly say that it must be public, the reference type just follow std::shared/weak_ptr semantics: The reference must have a protected destructor preventing the user to directly delete an object reference instead of using the std::shared_ptr semantics.
Actions taken:
August 2, 2013: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 18850: Contructor declarations in Servant code are wrong (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Marcel Smit, nobody)
Nature: Enhancement
Severity: Minor
Summary:
The code on page 42 has a class named 'Servant' but the constructors in this piece of code are declared as 'ServantBase'. Also the =-operators are referring to 'ServantBase' instead of 'Servant'.    The text that follows this piece of code also talks about 'ServantBase' (in bold) instead of 'Servant'

Resolution: Correct constructor declarations of Servant ServantBase is a left over of the old IDL to C++ specification, in IDL to C++11 we only should use Servant
Revised Text: In section 6.26.2 all occurrences of "ServantBase" should be replaced with "Servant"
Actions taken:
August 2, 2013: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 19035: provide unique class name as mapping of PortableServer::Servant (idl2cpp11-rtf)

Click
here for this issue's archive.
Nature: Revision
Severity: Significant
Summary:
    Both Servant and ServantBase for the same purpose are used in the declaration of the mapping of PortableServer::Servant.    Throughout this chapter Servant should be used unambiguously.

Resolution: Provide correct mapping for Servant Both Servant and ServantBase are used in 6.26.2, this should be Servant, but that has already been resolved as part of [1]ITCR-7 ---------------------------------------------------------------------------------------- [1] http://solitaire.omg.org/browse/ITCR-7
Revised Text:
Actions taken:
October 28, 2013: received issue
April 20, 2015: Duplicate or Merged
July 8, 2015: closed issue

Issue 19036: wrong return type for Foo::some_function() (idl2cpp11-rtf)

Click
here for this issue's archive.
Nature: Revision
Severity: Significant
Summary:
The return type should be       IDL::traits<Test::Hello>::ref_type      instead of    CORBA::servant_traits<Test::Hello>::ref_type

Resolution: Correct return type of example method In the example code as part of section 6.23.3 the incorrect return type is given. The correction as suggested by the submitter is the correct one
Revised Text: Change the first line of the example code as part of section 6.23.3 from CORBA::servant_traits<Test::Hello>::ref_type to IDL::traits<Test::Hello>::ref_type
Actions taken:
October 28, 2013: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 19207: Add missing default initialization for valuetypes (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
In 6.18.2 Constructors, Assignment Operators, and Destructors the default constructor of the OBV classes is mentioned. This lacks a description that it should initialize members, proposal is to add to 6.18.2, OBV part, after the first sentence add:      The default constructor initializes object  reference members to appropriately-typed nil object references, basic datatypes to their default value as listed in  Table 6.2, and enums to their first value. All other members are initialized using their default constructors.

Resolution: Add missing behavior of the default constructor As suggested by the submitter the behavior of the default constructor for the OBV classes should be mentioned
Revised Text: To section 6.18.2, second paragraph, add the following new sentence after the first sentence: The protected default constructor initializes object reference members to appropriately-typed nil object references, basic datatypes to their default value as listed in Table 6.2, and enums to their first value. All other members are initialized using their default constructors.
Actions taken:
February 7, 2014: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 19260: Valuebox should also have swap support (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Enhancement
Severity: Minor
Summary:
For valueboxes the spec should also describe swap support, they are complete so they can support swap. To be added:    A namespace level swap and a specialization of std::swap<> must be provided to exchange the values of two valueboxes in an efficient matter.

Resolution: Valueboxes should have swap support The issue proposed the support of swap for valueboxes but valueboxes are valuetypes which are reference types which already have swap support, also the boxed type has swap support. It doesn't add any value to define swap support for valueboxes because that can't be used at all, it is the valuetype reference and the boxed type that can be swapped and they have already swap support
Revised Text:
Actions taken:
February 26, 2014: received issue
April 20, 2015: Closed; No Change
July 8, 2015: closed issue

Issue 19498: Clarify valuetype factory mapping (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The valuetype factory mapping is too focused on the implementation, it should just refer to IDL<T>::factory_type as base class for the user provided factory implementation and shouldn't refer to ValueFactoryBase, that is an internal detail.     Ref devportal 3617

Resolution: Clarify valuetype factory mapping The current valuetype factory mapping ties the implementor of the specification to too much details, we should just mention the classes with their signatures and the traits.
Revised Text: In section 6.18.10.1 change the first sentence from Just as they provide concrete C++ valuetype classes, applications must also provide factories for those concrete classes. The base of all value factory classes is the C++ ValueFactoryBase class: to Just as they provide concrete C++ valuetype classes, applications must also provide factories for those concrete classes. The base of all value factory classes is the C++ ValueFactoryBase class which has a protected constructor and destructor: **** For the implementation code of class ValueFactoryBase remove " : public virtual CORBA::LocalObject", the exact base class could be implementation specific and there is no need to list this **** Below the code part change: The C++ mapping for the IDL CORBA::ValueFactory native type is a reference to the local ValueFactoryBase class, as shown above. to the following text, no need to mention local The C++ mapping for the IDL CORBA::ValueFactory native type is an object reference to the ValueFactoryBase class, as shown above. *** Next sentence which starts with: Applications derive concrete factory classes from ValueFactoryBase, Remove "from ValueFactoryBase,", from which base is described in detail in the next section **** In section 6.18.10.2, for class V_factory, remove ValueFactoryBase and replace it by three dots, it is not important where this base class derives from **** Text below V_factory replace "these classes" with "the IDL::traits<>::factory_type trait" *** Next paragraph, change OBV_ to "IDL::traits<>::obv_type trait" *** Next paragraph (last of this section), change ValueFactoryBase to "IDL::traits<>::factory_type"
Actions taken:
July 1, 2014: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 19499: Make mapping of sequences more flexible (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
In 6.12 we define:      An unbounded sequence is mapped to a C++ std::vector.      For example a sequence of octets is now not optimal, in order for implementations to optimize sequences but users not to harm we propose to change this definition to    An unbounded sequence is mapped to a type delivering C++ std::vector semantics.

Resolution: Deferred Deferred
Revised Text:
Actions taken:
July 1, 2014: received issue
April 20, 2015: Deferred
July 8, 2015: closed issue

Issue 19575: Missing move assignment operator in class ColorValue (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The class ColorValue as example is missing the move assignment operator which should be:    ColorValue(& operator= (ColorValue(&&)

Resolution: Correct provided signature for valuebox types Triggered by this issue we addressed the incorrectly provided signature for valuebox types. Also the argument name "val" got removed because it doesn't add any value and we don't want to propose a specific name (which could clash when the user for example defines a valuebox of type val)
Revised Text: In section 6.18.7.2 the following changes have to be made. First, in the bullet list add to the existing two bullets with text *Accessors are always named _value *A protected destructor and protected constructors A new third bullet with text *Protected copy and move assignment operators **** In the class ColorValue make the following changes: *Remove val as argument name for all constructors *Add the following new move assignment operator just above the destructor: ColorValue& operator=(ColorValue&&); *Change the argument of the existing copy assignment operator from "Color" to "const Color&"
Actions taken:
August 13, 2014: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 19576: Move constructor of ValueBase incorrect (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The listed move constructor of ValueBase is incorrect, it should be    ValueBase(ValueBase&&);

Resolution: Correct move constructor of ValueBase Proposal is to accept the changed as made by submitter
Revised Text: In section 6.18.5, for the class ValueBase change the line ValueBase(&&); To ValueBase(ValueBase&&);
Actions taken:
August 13, 2014: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 19577: usage of OBV trait should be improved (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The specicification currently lists:      The application developer then overrides the pure virtual functions corresponding to valuetype operations in a concrete class derived directly or indirectly from the OBV  trait.      It is not precise enough to juset say OBV traits, it should say      The application developer then overrides the pure virtual functions corresponding to valuetype operations in a concrete class derived directly or indirectly from the IDL::traits<>::obv_type  trait.

Resolution: Correct usage of OBV trait The concept of a OBV class is coming from the IDL to C++ language mapping, IDL to C++11 should use the concept of the obv_type trait
Revised Text: In section 6.18 change the line from The application developer then overrides the pure virtual functions corresponding to valuetype operations in a concrete class derived directly or indirectly from the OBV trait. To the following type where IDL::traits<>::obv_type should have framemaker character style C The application developer then overrides the pure virtual functions corresponding to valuetype operations in a concrete class derived directly or indirectly from the IDL::traits<>::obv_type trait.
Actions taken:
August 13, 2014: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 19580: Mention move constructor with abstract (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
for 6.19.1 to the bullet list should be added     a protected move constructor

Resolution: Correct constructors of AbstractBase As proposed by the submitter the move constructor should be mentioned, but also the copy/move assignment operators should be mentioned. The val argument name should be removed because it doesn't add any value
Revised Text: In section 6.19.1 change the bulleted list as following: *Change the second bullet from "a protected copy constructor" to "a protected copy and move constructor" *Add a new third bullet with "a protected copy and move assignment operators" In the code for class AbstractBase make the following changes *Remove "val" as argument name *Above the virtual destructor add a line with "AbstractBase& operator=(const AbstractBase&);" and a line with "AbstractBase& operator=(AbstractBase&&);" which are the declarations for the missing assingment operators
Actions taken:
August 15, 2014: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 19581: Destructor should just be virtual (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
for 6.19.1 to the bullet list mentions       a protected pure virtual destructor      This should be       a protected virtual destructor    it is not pure, see the example later on

Resolution: Make destructor just virtual Proposal is to make the destructor of abstract base "protected virtual" as proposed by the submitter
Revised Text: In section 6.19.1 change the text a protected pure virtual destructor To a protected virtual destructor
Actions taken:
August 15, 2014: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 19582: fixed member types use incorrect type (idl2cpp11-rtf)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
In table 6.11 digits/scale are described, they should use uint16_t instead of uint32_t, see the above template, there also uint16_t is used

Resolution: Replace uint32_t with uint16_t as proposed Proposal is to replace uint32_t with uint16_t as proposed, the digits and scale are both uint16_t
Revised Text: In table 6.11 change the text std::integral_constant type of value_type uint32_t indicating the number of digits of the fixed type to std::integral_constant type of value_type uint16_t indicating the number of digits of the fixed type And change the text std::integral_constant type of value type uint32_t indicating the scale of the fixed type to std::integral_constant type of value type uint16_t indicating the scale of the fixed type
Actions taken:
August 18, 2014: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 19672: _this for skeleton, not for implementation (idl2cpp11-rtf)

Click
here for this issue's archive.
Nature:
Severity:
Summary:
_this() method example should be given for the skeleton (eg. A_skel), not for implementation (A_impl):      // C++  class A_skel    : public virtual PortableServer::Servant  {    IDL::traits<A>::ref_type _this();    ...  }

Resolution: Correct code example for _this The code example defines the _this in the wrong class, it should be done in the skeleton class, not in the user implementation class. Because the example inheritance of the skeleton classes is up to the vendor also the inheritance of CORBA::servant_traits<A>::base_type should be removed and replaced with three dots. As last is the override something that should be removed.
Revised Text: The example should be updated from // C++ class A_impl : public virtual CORBA::servant_traits<A>::base_type{ public: IDL::traits<A>::ref_type _this() override; ... } ; to // C++ class A_skel : public virtual ...{ public: IDL::traits<A>::ref_type _this(); ... } ;
Actions taken:
December 8, 2014: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Discussion:
  


Issue 19678: replace POA_B by adequate skeleton (idl2cpp11-rtf)

Click
here for this issue's archive.
Nature: Clarification
Severity: Minor
Summary:
drop POA_B for skeleton class deriveved from abstract class and replace it adequately:      // C++  class A { ... }  class B_skel : public virtual ... /* maybe PortableServer::Servant */,                 protected virtual A  {     ...  };

Resolution: Remove usage of B_Skel and remove mentioning of PortableServer::ServantBase The report is correct, POA_B is a left over of the old IDL to C++ language mapping. At the same time we want to remove the mandatory inheritance of PortableServer::ServantBase, that is something for the vendor to decide, not important for the user.
Revised Text: In section 6.26.6 on page 47 the example // C++ class A{ ... }; class POA_B : public virtual PortableServer::ServantBase, protected virtual A { ... } ; Should be replaced with // C++ class A{ ... }; class B_skel : public ..., protected virtual A { ... } ;
Actions taken:
December 10, 2014: received issue
April 20, 2015: Resolved
July 8, 2015: closed issue

Issue 19686: abstract interfaces with corrected skeleton name (idl2cpp11-rtf)

Click
here for this issue's archive.
Nature: Clarification
Severity: Minor
Summary:
� 6.26.6, to the end, about abstract interfaces:      I guess the C++ snippet should be like      // C++  class A { ... }  class B_skel : public virtual ... /* maybe PortableServer::Servant */,                 protected virtual A  {     ...  };    dropping the old POA_B thing.

Resolution: Duplicated issue This issue [1]ITCR-43 looks to be a duplicate of [2]ITCR-42 ---------------------------------------------------------------------------------------- [1] http://solitaire.omg.org/browse/ITCR-43 [2] http://solitaire.omg.org/browse/ITCR-42
Revised Text:
Actions taken:
December 15, 2014: received issue
April 20, 2015: Duplicate or Merged
July 8, 2015: closed issue

Issue 19697: Skeleton class as consistent template parameter for CORBA::servant_traits (idl2cpp11-rtf)

Click
here for this issue's archive.
Nature: Clarification
Severity: Minor
Summary:
Instead of the IDL interface class, the skeleton class should be used as template parameter for CORBA::servant_traits<>.      Rationale:      1. The servant which the traits describe is realized by an instance of a class derived from the skeleton class which in turn (directly or indireclty) inherits PortableServer::Servant but not necessarily the interface class.      PortableServant::Server < ... < CORBA::servant_traits<A_skel>::base_type < A_impl      instead of       PortableServant::Server < ... < CORBA::servant_traits<A>::base_type < A_impl        (A, A_skel and A_impl are arbitrary names denoting the interface, the skeleton and the implementation class, resp.).                   2. In chapter 6.26.4 "Servant argument passing", we have CORBA::servant_traits<PortableServer::Servant>; this takes (the very basic) servant class as template parameter.      CORBA::servant_traits<PortableServer::Servant>::ref_type < CORBA::servant_traits<A_skel>::ref_type      instead of       CORBA::servant_traits<PortableServer::Servant>::ref_type < CORBA::servant_traits<A>::ref_type      3. In chapter 6.26.3 "Servant references" CORBA::make_reference<...> takes the implementation class as argument to create a CORBA::servant_traits<...>::ref_type. This would be more consistent with CORBA::make_reference<...> taking an interface class as parameter to create IDL::traits<...>::ref_type.      CORBA::make_reference<A_impl> -> CORBA::servant_traits<A_skel>::ref_type      like      CORBA::make_reference<A> -> IDL::traits<A>::ref_type      instead of      CORBA::make_reference<A_impl> -> CORBA::servant_traits<A>::ref_type      4. CORBA::servant_traits<...>::base_type is used as base class for implementation classes in �� 6.26.6 and 6.26.7. Having CORBA::servant_traits<A_impl>::base_type instead of CORBA::servant_traits<A>::base_type is more consistent with the use of IDL::traits<LocalIF>::base_type denoting CORBA::LocalObject or something derived from CORBA::LocalObject.      CORBA::servant_traits<A_skel>::base_type < A_impl      like      IDL::traits<LocalIF>::base_type < MyLocalIf      instead of      CORBA::servant_traits<A>::base_type < A_impl      This affects all uses of servant_traits in �� 6.26.3, 6.26.5, 6.26.6, 6.26.7.      The disadvantage to be considered is that the naming of the skeleton class is not standardized, so implementation classes to be provided by a programmer using an IDL to C++11 framework package cannot longer inherit a well-specified base class like CORBA::servant_traits<A>::base_type. Instead something like CORBA::servant_traits<skeleton<A>>:base_type would be required where skeleton<...> is a framework-specific template.

Resolution: Keep referring to A instead of A_skel One of the basic rules we defined for IDL2Cpp11 is that we don't want the user to remember all kind of rules to translate between the IDL name and some Cpp11 type. At the moment a IDL type is translated to multiple C++ types we are using the IDL traits. The concept of a skeleton exists in IDL2Cpp11 but the exact class of the skeleton is accessed by the user using the CORBA::servant_traits. The proposed change will complicate the life for the user without any benefit.
Revised Text:
Actions taken:
December 27, 2014: received issue
April 20, 2015: Closed; No Change
July 8, 2015: closed issue