Issues for C++ Revision Task Force mailing list

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

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

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

Issue 52: Omission in union C++ mapping
Issue 75: Access to sequence buffers
Issue 91: Efficiency issue in C++ mapping
Issue 92: T__alloc in C mapping
Issue 94: Defining an operator for struct/union/sequence _var types
Issue 95: Re-opening modules
Issue 96: C++ classes for modules
Issue 98: In String Argument Passing Question
Issue 100: Union discriminators in C++
Issue 101: Memory Management Clarification
Issue 123: Fixed structs
Issue 125: Passing of object reference in pointers
Issue 134: Union problem
Issue 141: Practical problem with DII using Request Pseudo Object
Issue 142: inserter and extractor functions for exceptions
Issue 143: Testing exceptions
Issue 144: Rethrowing exceptions
Issue 145: Missing Any inserter
Issue 146: Any extractor signature problem
Issue 147: Defintion of Any
Issue 148: Adding T_copy function
Issue 150: Any string extractor
Issue 154: Problem with Any::to_object memory management
Issue 178: Bounded sequence problem (Section 16.11 p. 16-23)
Issue 185: Return value of maximum() for unbounded sequences
Issue 186: Inconsistent interfaces for the operation pairs *duplicate* and
Issue 187: Freeing inaccessible storage for T_var as out parameter
Issue 188: interface mapping
Issue 189: Distinction between _var and _ptr types
Issue 190: Names of anonymous types
Issue 191: get_principal () needs an environment parameter
Issue 192: Identifier conflicts resulting from the language mapping
Issue 193: Pseudo objects for DSI
Issue 194: Implementation dependency for _var and _ptr
Issue 195: _ptr member accessors for string and objref
Issue 196: illegal union access when discriminator is wrong
Issue 197: TypeCode/Value mismatch in ANY
Issue 198: Representation of void* returned from ANY
Issue 199: Levels of portability conformance requested
Issue 200: fixed- vs. variable-length types
Issue 201: example incorrect?
Issue 202: Assignment to T_var
Issue 203: Detection of initialization of T_var
Issue 204: string and objrev members of constructed types
Issue 205: Taking T out of T_var
Issue 206: Implementation description
Issue 207: C++ mapping complexity
Issue 208: Autoextension of sequences
Issue 209: Sequence implementation
Issue 210: State of release flag for sequence
Issue 211: Sequence maximum() call
Issue 212: References returned from sequence operator[] after realloc
Issue 213: Sequence lacks common features
Issue 214: Sequence buffer types
Issue 215: C vs. C++ coding style
Issue 216: Sequence creation
Issue 217: Copying of out parameters
Issue 218: Semantics of sequence length() operation
Issue 219: Array slice example
Issue 220: Return value of operator[] for array var
Issue 221: Array_forany
Issue 222: Global functions vs. T_var namespace
Issue 223: Storage ownership issue
Issue 224: Pointers vs. values
Issue 225: handling void* from Any
Issue 226: void* from Any for constructed types
Issue 227: anonymus types
Issue 228: callee-allocated storage modification
Issue 229: Typo in table 3?
Issue 230: _var types for fixed-length types
Issue 231: union accessors
Issue 232: Mapping for IDL context
Issue 234: accessor function on SystemException
Issue 235: A_ptr and A_var should be distinct types
Issue 236: operator>>= on strings and object references
Issue 237: Allocated storage for out and return strings
Issue 238: C++ namespaces
Issue 239: Implementation of parameter passing for T_var types
Issue 240: Any and IN_COPY_VALUE
Issue 241: allocbuf and initialization of elements
Issue 242: freebuf and destruction of elements
Issue 244: RTTI vs. _narrow for exceptions
Issue 245: accessor members for structs
Issue 246: Access to sequence elements
Issue 247: TypeCode mapping update for CORBA 2.)
Issue 248: nested ptr and var types
Issue 249: to/from string for Any type safety
Issue 250: union accessors require temporaries
Issue 251: decompose Any into constituent primitives
Issue 252: T_copy for string and array
Issue 253: Name field for SystemExceptions
Issue 254: iterating over Any primitives
Issue 255: Constructor taking discriminant as argument
Issue 256: Accessors for release flag of sequence
Issue 257: Any release flag and operator<<=
Issue 258: Accessors for the Any release flag
Issue 259: Accessor for exception id
Issue 260: Exception id for each exception type
Issue 261: TypeCode for each basic and IDL defined types
Issue 262: TypeCode interpreter
Issue 263: buffer classes for sequences
Issue 264: make String_var reference but not adopt
Issue 265: explicit copy/adopt for String_var
Issue 266: operator<< for ostreams and Exceptions
Issue 267: ANy release flag and operator
Issue 268: C++ semantics vs. IDL semantics
Issue 269: Default constructor for String_var
Issue 290: u++ binding for ServerRequest pseudo object
Issue 456: Interpretation of _narrow semantics
Issue 479: DII and DSI are useless with current Any
Issue 480: Persistent Any values
Issue 481: [q] intf name == op name
Issue 482: Defect with anonymus types in union mapping
Issue 484: OMG C++ Mapping: Implicit Conversion Operators
Issue 496: Double underscore identifier mapping
Issue 497: Legal IDL cannot map to C++
Issue 501: Bug in C++ NVList mapping
Issue 594: Boolean type left undefined by C++ mapping
Issue 599: const method qualification should be removed
Issue 600: String_var and Any_var are missing the T_ptr definition
Issue 601: Section 17..13.1 release()method should be added to mappping
Issue 605: Section 8.2: set_exception() supported by BOA?
Issue 608: Interface definition must be standardized
Issue 615: POA_*_tie classes in 18.1.4 can"t be supported
Issue 617: Why does get_principal() take an Environment parameter
Issue 618: IDL from Ennvironment has invalid attribute
Issue 621: C mapping for list_initial_services is incorrect
Issue 622: Section 16.2, Section 16.6: editorial
Issue 627: PortableServer:ObjectId_tow_wstring() and string_to_ObjectId()
Issue 637: Section 18.1.2: _this() and IMPLICIT_ACTIVATION need clarification
Issue 646: Blocking semantics of get_next_response not well specified
Issue 647: include files
Issue 653: sec. 18.1.2: explicit information on _this() is missing
Issue 663: Implementation problem with policy objects using root POA
Issue 673: C++ mapping of servants may result in ambigous run-time behavior
Issue 674: Multiple inheritance of C++ Servants is ill-defined
Issue 678: inout strings modifiable?
Issue 705: C and C++ Mapping question
Issue 721: Bounded strings
Issue 722: Wide string allocation (1)
Issue 723: Wide string allocation (2)
Issue 731: IDL generated C++ types and stream operators
Issue 732: Typo in C++ mapping
Issue 781: C++ mapping for IN object references
Issue 800: Missing Mappings for Object
Issue 801: Alias type codes in any values
Issue 803: C++ mapping: missing from_wchar and to_wchar
Issue 804: Typos in PIDL to C++ mappings
Issue 863: Read-only restrictions on parameters
Issue 902: CORBA::Bounds and CORBA::TypeCode::Bounds
Issue 914: Mappings for hash, is_equivalent, _is_a and _non_existent
Issue 920: ServantBase mappings
Issue 932: Semantics of >>= operator in C++ mapping
Issue 933: CORBA::ORB::InvalidName ambigious in C++ mapping
Issue 956: No conversion defined from a B_var to an A_ptr
Issue 1056: Fixed types in orbos/98-01-11
Issue 1069: Typos on p 20-34 of orbos/98-01-11
Issue 1070: macros for fixed arithmetic results
Issue 1072: fixed_digits and fixed_scale member functions
Issue 1073: Missing constructor for Fixed
Issue 1092: C++ mapping for fixed is broken (01)
Issue 1093: C++ mapping for fixed is broken (02)
Issue 1095: Old References in C++ mapping
Issue 1115: TypeCode_ptr base_typecode(TypeCode_ptr tc)
Issue 1124: C++ Fixed type issue (01)
Issue 1125: Fixed type (02)
Issue 1126: C++ Fixed Type (03)
Issue 1128: String member initialization
Issue 1134: C++ Sequence mapping Question
Issue 1137: Typos in parameter passing rules
Issue 1148: Typo in orbos/98-01-11
Issue 1149: _out parameter typo
Issue 1289: How to put a generic CORBA exception into an Any
Issue 1319: C++ Any mapping proposed change
Issue 1383: Missing operators in orbos/98-01-11
Issue 1384: Mapping for wide strings
Issue 1386: Any and WChar issue
Issue 1418: C++ _var type widening proposal
Issue 1519: _var & _out types problems (01)
Issue 1520: Spec does not mention the existance of an Any_out class
Issue 1521: Spec is too verse in defining the T_var types for fixed length
Issue 1534: Add _narrow() operation to each POA servant
Issue 1535: Do POA servant classes need to use virtual inheritance?
Issue 1538: Missing text describing fixed point constant mapping
Issue 1617: C++ mapping for strings
Issue 1626: C++ issue to coordinate with proposed resolution of issue 752
Issue 1627: Problems with deactivate_object()
Issue 1631: C++ Servants: Adding Reference counting
Issue 1655: Section 5.3.6.3 Value Factories
Issue 1656: C++ language mapping minor editorial revision
Issue 1657: Section 7.3.5 ValueBase editorial changes
Issue 1658: Parameter passing rules for ValueFactory
Issue 1659: Section 7.3.6: PortableServer::ValueRefCountBase
Issue 1686: resolve_initial_references missing from Orb interface
Issue 1700: void * functions for Any
Issue 1735: Servant management rules
Issue 1747: from_string issue
Issue 1776: New C++ issue about T_out classes
Issue 1777: DSI C++ issue
Issue 1783: Comparison operators for Fixed
Issue 1785: Passing Fixed to operations
Issue 1794: _ptr_type and _var_type typedefs
Issue 1799: struct containing Fixed type
Issue 1898: Fixed-point initialization
Issue 1899: Rounding and truncation of Fixed
Issue 1923: Is SystemException supposed to be concrete?
Issue 1937: Signature of _narrow in exceptions
Issue 1946: sequence allocbuf parameter != 0
Issue 1947: sequence max < length
Issue 1971: Extraction of strings from an Any
Issue 1983: Extraction of Fixed from Any
Issue 1984: Generic extraction of Fixed
Issue 2002: The C++ mapping for valuetype _narrow should not _add_ref
Issue 2003: Tie classes
Issue 2029: _primary_interface
Issue 2032: Typedef for ties?
Issue 2035: mapping IDL Unicode escapes to C++
Issue 2097: 98-09-03, exception inconsistency
Issue 2118: Any missing LongLong operators, etc?
Issue 2207: Need more info for custom marshalled value in C++
Issue 2215: Object reference members, _var, and widening
Issue 2222: Is public _ptr member mandatory?
Issue 2226: Errors in example code for boxed struct
Issue 2231: _raise() should be const
Issue 2234: String sequence and allocbuff
Issue 2253: portable includes
Issue 2285: Value Box Mapping
Issue 2286: string allocation functions -- description ambiguous
Issue 2288: C++ spec uses reserved names in global namespace
Issue 2306: Valuetypes as operation arguments
Issue 2309: Memory management of recursive value
Issue 2335: Extraction from Any by pointer
Issue 2345: "Diamond of Death" in CosLifeCycleReference
Issue 2346: Any inserters and extractors
Issue 2350: boxed types for floating point values
Issue 2351: CORBA2.3 C++ mapping for the TypeCode class (section 20.31.2)
Issue 2354: CustomMarshal mapping type
Issue 2355: ORB mapping re Policy
Issue 2357: Misleading text for DSI invoke() and _primary_interface()
Issue 2375: Transfer of C++ codes
Issue 2376: Interface issue
Issue 2441: tie doesn"t do ref counting
Issue 2443: C++ keyword mapping ambiguous
Issue 2445: add a _var type for each servant type
Issue 2453: Any inserters for strings need to use const pointers
Issue 2463: Incorrect types for type-safe Any extraction
Issue 2489: 20.17.9 Valuetype Inheritance
Issue 2496: generate concrete classes and factories for valuetypes without initializer
Issue 2497: Value boxes and sensible value issue
Issue 2498: narrow abstract interface class to concrete object?
Issue 2499: Add AbstractBase base type to IDL language?
Issue 2523: Valuetype argument passing
Issue 2525: string sequences and empty strings
Issue 2530: Sequences and get_buffer()
Issue 2560: Factories for StringValue and WStringValue
Issue 2561: Valuetypes and arbitrary graphs
Issue 2564: Valuetypes and _out classes in C++ mapping
Issue 2614: Setting the TypeCode of an Any without setting a value
Issue 2619: operator>> for String_var
Issue 2640: IDL that is not IDL!
Issue 2841: Two obvious typos in the C++ mapping for OBV (docs/formal/99-07-41.pdf)
Issue 2875: ValueBase::_copy_value clarification
Issue 2880: Union string member mapping defect?
Issue 2887: Contents of string members (01)
Issue 2888: Contents of string members (02)
Issue 2890: String extractor semantics undefined?
Issue 2895: Exception::_raise() should be const?
Issue 2897: Exception constructors should be protected
Issue 2902: Unary operators for Fixed class have wrong return types
Issue 2946: CORBA 2.3 Editorial problem in TypeCode
Issue 2947: Object _out class copy constructor & assignment op wrong
Issue 2948: Editorial typo in Section 1.36.3 of C++ mapping
Issue 2949: Fixed(const char *) constructor problem
Issue 2950: Fixed::round and truncate issue
Issue 2951: Inconsistency in 1.7 and 1.9 of mapping
Issue 2966: Standard object operations & DynamicImplementation
Issue 2967: NamedValue not only an NVList element
Issue 3055: _default_POA
Issue 3074: Problem with AbstractBase definition
Issue 3078: 1 of 4 issues with Abstract interfaces
Issue 3079: 2 of4 issues with Abstract interfaces
Issue 3080: don't understand the last paragraph of 1.18.2:
Issue 3081: 4 of 4 issues with Abstract interfaces
Issue 3092: Need Any::to_value operation?
Issue 3101: _var types for fixed-length underlying types
Issue 3103: Extraction operator for system exceptions?
Issue 3110: allocbuf() for bounded sequences?
Issue 3111: Abstract interface and DSI issue with C++
Issue 3113: Any::to_abstract_base needs statement about memory management
Issue 3150: Exceptions in servant constructors
Issue 3161: _out types and nested calls
Issue 3165: C++: ostream insertion
Issue 3206: Valuetype code typo in CORBA 2.3 C++ mapping
Issue 3217: Any and UnknownUserException
Issue 3222: C++ valuetype issue (01)
Issue 3223: Valuebox for object reference underspecified
Issue 3224: C++ Value Type issue (02)
Issue 3225: C++ ValueBox & Fixed question
Issue 3239: Obsolete text in 1.40.3
Issue 3242: C++ spec: Valuebase missing get_value_def
Issue 3245: Construction of _var types
Issue 3246: UnknownUserException and stubs
Issue 3247: fixed-length _var assignment from pointer
Issue 3248: Object Reference insertion/extration to Any
Issue 3298: Problem with OBV_ valuetype class constructor
Issue 3304: Problem with type specific valuetype factories in CORBA 2.3.1 C++ mapping
Issue 3326: ValueBase::_copy_value() function is underspecified
Issue 3328: Do valuetype POA servants get tie templates?
Issue 3331: Valuetype "copying" semantics underspecified? (C++ issue # 1)
Issue 3332: Valuetype "copying" semantics underspecified? (C++ Issue # 2)
Issue 3339: ref counting ambiguous?
Issue 3340: set_servant and null servant
Issue 3359: Issue with valuetypes & inout/out parameters
Issue 3380: Constructor for structures?
Issue 3381: _name and _rep_id
Issue 3401: void * operations on Any?
Issue 3532: DSI and implicit activation
Issue 3534: Null assignment to String_var?
Issue 3537: Sequence mapping & custom marshalling
Issue 3538: Read-only parameter remnants
Issue 3539: Variable-length out params and exceptions
Issue 3562: Supporting typedefs for _var types?
Issue 3563: Supporting typedefs for _var types?
Issue 3567: Any insertion for Boolean/Octet/Char
Issue 3574: unclear semantics for valuetype insertion into Any
Issue 3603: unspecified criterion for Any extraction
Issue 3604: Any extraction widening to ValueBase
Issue 3616: CORBA::Environment for EH compilers
Issue 3673: CORBA::release and CORBA::is_nil on POA_ptr
Issue 3796: Missing conversion operator on String_var
Issue 3797: Another issue with String_var
Issue 3944: CORBA::Fixed needs a to_string() conversion function
Issue 3966: _default_POA if no default ORB?
Issue 4002: CORBA::RequestSeq or CORBA::ORB::RequestSeq?
Issue 4114: Requiring ref counting in ServantBase
Issue 4119: questions to IDL - C++ mapping ( CORBA 2.3, valuebox)
Issue 4144: ORB::destroy() missing
Issue 4150: Optional parameters for _create_request?
Issue 4151: Passing two context lists to _create_request()
Issue 4153: _name & _rep_id pure virtual?
Issue 4157: publication of messaging / unchecked_narrow
Issue 4160: mapping of local interfaces
Issue 4166: Need for TIE template for skeletons for valuetypes that support
Issue 4172: LocalObject
Issue 4186: CORBA::Object & LocalObject
Issue 4199: Inserters/extractors for boxed strings?
Issue 4210: Non-exception neutral code in C++ mapping.
Issue 4243: Backward compatibility with C
Issue 4244: Remnant of read-only return values and out params
Issue 4245: How to create a local object reference?
Issue 4265: Server-side exception specifications and ISO C++ std::exception
Issue 4270: semantics of valuetype _downcast operation unclear
Issue 4274: There is an incorrect page reference
Issue 4288: ServantBase needs _get_domain_managers()?
Issue 4325: Deprecated Ref identifier
Issue 4340: Structure member ordering
Issue 4344: Typedefs for struct members?
Issue 4496: Local interfaces issue 1
Issue 4498: Escaped keyword mapping?
Issue 4499: Dangling reference
Issue 4530: Bug on _var references
Issue 4533: Fixed and truncation/rounding?
Issue 4539: UTF-8 and IDL character types in C++
Issue 4545: C++ mapping for CORBA::LocalObject
Issue 4567: ORB interface destroy() operation issue
Issue 4610: ValueRefCountBase::_add_ref
Issue 4743: Context PIDL mapping bug
Issue 4797: Add set of typedefs that would facilitate template programming
Issue 4871: Missin operations in Object interface, ptc/01-06-07
Issue 5440: Prohibit extracting from any into _out type?
Issue 5450: Typographical problems
Issue 5466: conversion algorithm not specified
Issue 5578: Initialized T_var?
Issue 5579: implementing local interfaces in C++
Issue 5580: No Mapping for Local interface in C++
Issue 5784: need mapping for get_orb and get_component on CORBA::Object
Issue 5807: String_var and C++ implicit conversions
Issue 5854: 1.16.3 Extraction from any
Issue 6163: _var's and valuetypes
Issue 6245: No portable way to create a OUT argument for a DII request
Issue 6276: Sequence _var needs const operator []
Issue 6413: Concrete ValueType _init class problem
Issue 11403: Section: 13.6 Server mapping
Issue 12856: Section 4.5.4: parameter to _narrow
Issue 12913: Servant_var + spec typo?
Issue 14169: make it possible to write more generic C++ code
Issue 14852: Describe operator != and == for all generated types
Issue 16283: C++ keywords should be updated
Issue 16355: Interface should add _out_type typedef
Issue 16356: valuetype classes should add _out_type typedef
Issue 16358: get_policy should return Policy, not Policy_ptr
Issue 16528: valuetype example has errors
Issue 16892: need unchecked narrow

Issue 52: Omission in union C++ mapping (cxx_revision)

Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Several problems exist with the definition of union constructors.

Resolution: fixed by adding clarifying text
Revised Text:
Actions taken:
July 11, 1996: Received issue
February 19, 1999: closed issue

Discussion:


Issue 75: Access to sequence buffers (cxx_revision)

Click
here for this issue's archive.
Nature: ENHANCEMENT
Severity: Serious
Summary:
Summary: We would like to see an enhancement which allows access to sequence buffers once they have been constructed.

Resolution: Fixed
Revised Text:
Actions taken:
August 13, 1996: Received issue
February 19, 1999: closed issue

Discussion:


Issue 91: Efficiency issue in C++ mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: There is a problem with the C++ mapping which requires excessive memory copying in order to be exception safe while constructing a return value.

Resolution: This issue was fixed by Portability Submission
Revised Text:
Actions taken:
August 22, 1996: Received issue
January 2, 1998: closed issue

Discussion:


Issue 92: T__alloc in C mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Is it intended that use of T__alloc functions are the only conformant way to allocate values of (variable length) type T? Or can a conformant app also declare them on the stack?

Resolution: clarified
Revised Text:
Actions taken:
August 27, 1996: Received issue
February 19, 1999: closed issue

Discussion:


Issue 94: Defining an operator for struct/union/sequence _var types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: If no operator *() is defined for struct, union, or sequence _var types, some pieces of code will break.

Resolution: withdrawn by submitter
Revised Text:
Actions taken:
August 29, 1996: Received issue
February 19, 1999: closed issue

Discussion:


Issue 95: Re-opening modules (cxx_revision)

Click
here for this issue's archive.
Nature: Clarification
Severity: Minor
Summary:
Summary: Is it legal to split IDL module declarations and to re-open a module similarly to what is done with C++ namespaces?

Resolution: obsolete, cloe issue
Revised Text: Answered in the text of CORBA 2.0.
Actions taken:
August 30, 1996: Received issue
September 1, 1996: Resolved issue

Discussion:


Issue 96: C++ classes for modules (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Does the standard require an implementation to use C++ classes for modules if there is no namespace support? Or is it simply a suggestion?

Resolution: clarified
Revised Text:
Actions taken:
September 3, 1996: Received issue
February 19, 1999: closed issue

Discussion:


Issue 98: In String Argument Passing Question (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: To be compliant, does a client have to pass a string_alloc"ed string to a CORBA operation that takes an in string parameter? If so, why should the ORB care how the client created storage?

Resolution: clarified
Revised Text:
Actions taken:
September 6, 1996: Received issue
February 19, 1999: closed issue

Discussion:


Issue 100: Union discriminators in C++ (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Is a modifier function required under the C++ mapping of unions, and if it is, can it be used to set the discriminator to an illegal value?

Resolution: clarified
Revised Text:
Actions taken:
September 6, 1996: Received issue
February 19, 1999: closed issue

Discussion:


Issue 101: Memory Management Clarification (cxx_revision)

Click
here for this issue's archive.
Nature: Clarification
Severity:
Summary:
Summary: Should fields of a struct persist across a deep copy?

Resolution:
Revised Text:
Actions taken:
September 6, 1996: Received issue
February 19, 1999: closed issue

Discussion:
clarified


Issue 123: Fixed structs (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Should the ORB hide the difference between fixed and variable length structs from the application developer?

Resolution: Close no change. This change is too intrusive and would break too much existing code.
Revised Text:
Actions taken:
September 23, 1996: Received issue
June 13, 2000: closed issue

Discussion:


Issue 125: Passing of object reference in pointers (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Suggest changing the mapping so that object references for an interface "T" are passed as "const T_ptr&" instead of just "T_ptr" for "in" parameters.

Resolution: Close no change. This change is too intrusive and would break too much existing code.
Revised Text:
Actions taken:
September 23, 1996: Received issue
June 13, 2000: closed issue

Discussion:


Issue 134: Union problem (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Is this legal: union X switch(boolean) {case TRUE: short a; case FALSE: long b;default: double c;};? If no, why? If yes, what does _d() return if the union was set with the c() access function?

Resolution: fixed
Revised Text:
Actions taken:
September 24, 1996: Received issue
February 19, 1999: closed issue

Discussion:


Issue 141: Practical problem with DII using Request Pseudo Object (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: If I want to use the DII to send out multiple simultaneous requests, I don"t see a practical way to associate any client specific context that is C++ compliant to those requests.

Resolution:
Revised Text:
Actions taken:
October 1, 1996: Received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 142: inserter and extractor functions for exceptions (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: The spec is silent about whether to generate Any inserter and extractor (<<= and >>=) functions for exceptions, although they appear necessary for properly storing and manipulating exceptions.

Resolution: added clarifying texed, fixed
Revised Text:
Actions taken:
October 1, 1996: Received issue
February 19, 1999: closed issue

Discussion:


Issue 143: Testing exceptions (cxx_revision)

Click
here for this issue's archive.
Nature: Enhancement
Severity:
Summary:
Summary: In the DII, testing what variety of exception is stored in the Request Pseudo-object requires a sequence of dynamic_cast<> or (_narrow) calls. It would be useful to have a single call.

Resolution: closed/resolved
Revised Text: Change the signature of CORBA::Exception on page 1-94 as follows: // C++ class Exception { public: virtual ~Exception(); virtual void _raise() const = 0; virtual const char * _name() const; virtual const char * _rep_id() const; }; Add the following text on page 1-109, preceding the para that introduces UserException: The _name() function returns the unqualified name of the exception. The _rep_id() function returns the repository ID of the exception.
Actions taken:
October 1, 1996: Received issue
June 13, 2000: closed issue

Discussion:


Issue 144: Rethrowing exceptions (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: If all I want to do is rethrow an exception in my C++ client code, there is no convenient and compliant way. It would be useful to add extra members to allow this.

Resolution: Fixed by Portability submission
Revised Text:
Actions taken:
October 1, 1996: Received issue
January 2, 1998: closed issue

Discussion:


Issue 145: Missing Any inserter (cxx_revision)

Click
here for this issue's archive.
Nature: Clarification
Severity:
Summary:
Summary: The following inserter is missing in the C++ spec: void operation <<=(Any &, Any *); // non-copying

Resolution: Fixed in CORBA 2.2 editing process
Revised Text:
Actions taken:
October 1, 1996: Received issue
February 26, 1998: closed issue

Discussion:


Issue 146: Any extractor signature problem (cxx_revision)

Click
here for this issue's archive.
Nature: Clarification
Severity:
Summary:
Summary: Should the Any extractor signature be (Any_ptr &) instead of (Any &)?

Resolution: Fixed in CORBA 2.2 editing process
Revised Text:
Actions taken:
October 1, 1996: Received issue
February 26, 1998: closed issue

Discussion:


Issue 147: Defintion of Any (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: The definition of Any in C.3 is missing the no_copy flag in the class Any::from_string.

Resolution: Fixed in CORBA 2.2 editing process
Revised Text:
Actions taken:
October 1, 1996: Received issue
February 26, 1998: closed issue

Discussion:


Issue 148: Adding T_copy function (cxx_revision)

Click
here for this issue's archive.
Nature: Enhancement
Severity:
Summary:
Summary: It would be useful if the C++ mapping for IDL arrays also generated a T_copy() function to go along with T_alloc(), T_dup(), and T_free().

Resolution: Fixed as suggested by submitter
Revised Text:
Actions taken:
October 1, 1996: Received issue
February 19, 1999: closed issue

Discussion:


Issue 150: Any string extractor (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Does the Any string extractor (>>=) return a pointer that is still managed by the Any or a copy? The spec appears to be silent about this.

Resolution: Clarifying text added
Revised Text:
Actions taken:
October 2, 1996: Received issue
February 19, 1999: closed issue

Discussion:


Issue 154: Problem with Any::to_object memory management (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Section 16.14.5-implies that a CORBA::Object reference extracted from Any must share memory with actual interface stored in Any.Better: results of Any::to_object require explicit release()

Resolution: resolved, close issue
Revised Text:
Actions taken:
October 7, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 178: Bounded sequence problem (Section 16.11 p. 16-23) (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: "Default constructor for a bounded sequence always allocates a contents vector.."-> Bad effect for sequences such as CORBA::ReferenceDatawhich allocates 1024 octets of storage

Resolution: resolved, close issue
Revised Text:
Actions taken:
October 7, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 185: Return value of maximum() for unbounded sequences (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: CRITICAL
Summary:
Summary: Return value of maximum() for unbounded sequences must be specified.

Resolution: resolved, close issue
Revised Text: Paragraph 11 on page 38 fully explains the return values of maximum(), so that it is not an issue. Wording of page 37 para 3 should be similar to wording of first sentence of para 13 p. 38.Wording should be added to front of C++ Mapping Spec that defines
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 186: Inconsistent interfaces for the operation pairs *duplicate* and (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: CRITICAL
Summary:
Summary: The operations *duplicate* and *release* work together to provide memory mgmt. functionallity. It"s desirable to use both via similar interface/syntax. *nil*/*is_nil* similar problem

Resolution: close with no change
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close 186 with no change. Making changes to fundamental parts of the API purely to for stylistic reasons is too high a price to
pay because it would break existing code.


Issue 187: Freeing inaccessible storage for T_var as out parameter (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: CRITICAL
Summary:
Summary: Standard requires that a conforming implementation must free the inaccessable storage associated with a parameter passed as a managed type(T_var). How to achieve it for out parameters??

Resolution: Fixed by Portability submission
Revised Text:
Actions taken:
October 14, 1996: received issue
January 2, 1998: closed issue

Discussion:


Issue 188: interface mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Mapping for Interface [16.3 CORBA2.0] Mapping example in 3.5.6 implements the ptr type as full pointer. A pointer could be implemented as a class

Resolution: Close no change. This change is too intrusive and would break too much existing code.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
 Proposed resolution: Passing an objref implemented as an object (as opposed to a pointer) as a reference to const requires all the operations supported by that objref to be const member functions.


Issue 189: Distinction between _var and _ptr types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: A_var may be identical to A_ptr, so a conforming program cannot overload operations using these types solely. This may clash with statement of different behaviour between the two.

Resolution: fixed
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue, fixed

Discussion:


Issue 190: Names of anonymous types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: The spec does not define how anonymous types defined within constructed types should be named (as the C mapping does)

Resolution: Duplicate of issue 52
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 191: get_principal () needs an environment parameter (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: get principal() needs an Environment parameter, but object implementations using C++ EH do not have them. Spec should clarify this.

Resolution: resolved, close issue
Revised Text: proposed resolution: The Security Service has deprecated the Principal interface and hence get_principal(). Hence we should let this one just rest in peace :-)
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 192: Identifier conflicts resulting from the language mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Section 3.1 para 4 specifies the rule for resolving identifier conflicts with C++ keywords. A similar rule is required to resolve name conflicts resulting from the mapping.

Resolution: Close 192 with no change
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close 192 with no change. We've discussed this in the past, and all the options we could come up with a worse than the
original problem. I haven't heard anyone complain about this in practice, so it's probably better to leave it alone.


Issue 193: Pseudo objects for DSI (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: Medium
Summary:
Summary: [Ch 17 CORBA2.0] Sun would like section 4 to include the interface for the dynamic server invocation

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 194: Implementation dependency for _var and _ptr (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Implementation dependent: Implementation scheme for Interface _var & _ptr types

Resolution: Duplicate of issue189
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 195: _ptr member accessors for string and objref (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Implementation dependent: _ptr member accessors for strings & object references

Resolution: Close no change. Issue withdrawn by submitter.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 196: illegal union access when discriminator is wrong (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Implementation dependent: illegal access of union member accessor functions when the discriminator has the wrong value

Resolution: Close no change. Issue withdrawn by submitter.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 197: TypeCode/Value mismatch in ANY (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Implementation dependent: What happens if the typecode & value for the unsafe Any operations do not match?

Resolution: Close no change. Issue withdrawn by submitter.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 198: Representation of void* returned from ANY (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Implementation dependent: Implementation representation of the void * pointer returned by Any::value() for unknown types

Resolution: Close with no change. The latest draft has already deprecated the void * member functions for type A
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close with no change. The latest draft has already deprecated the void * member functions for type Any, so the issue is moot.


Issue 199: Levels of portability conformance requested (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 15.1.1 Pg 15-1 CORBA2.0 "Conforming client or server program is portable across all conforming implementations" We object the word "portable"being used in this context.

Resolution: Close no change. We do not have enough context to determine what the issue is.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 200: fixed- vs. variable-length types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.8 Pg 16-22 CORBA2.0, p. 28, Section 3.10, para 2: Devastating to programmers. Simple change to IDL an IDL file will require a complete rewrite of application code

Resolution: Duplicate of issue123
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 201: example incorrect? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.8 Pg 16-13 CORBA2.0 p. 29, Section 3.10 example para 4.  : This example looks incorrect. Example shown in 3.10.1 is inconsistent with the code in paragraph 4.

Resolution: Close no change. We do not have enough context to determine what the issue is.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 202: Assignment to T_var (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: What happens if i assign a container of data I hold Does aliasing allow in more than simple temporary. Is there a restriction that there can be NO overlapping?

Resolution: Close no change. We do not have enough context to determine what the issue is.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 203: Detection of initialization of T_var (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: [Sec 16.8.1 Pg 16-14 CORBA2.0] p.31, Section 3.10.1 para 12:  How do I know if the T_var I"ve been passed (in C++) has been initialized?

Resolution: Close no change. This change is too intrusive and would break too much existing code.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 204: string and objrev members of constructed types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Implementation dependent: Type of string & object reference members of struct, union, sequence

Resolution: Withdrawn by submitter
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 205: Taking T out of T_var (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: [Sec 16.8.1 Pg 16-14 CORBA2.0 p31, Section 3.10.1 para 14:  If I have  T_var referring to T. How can I take ownership?How to stop it from being deallocated when T_var goes out of scope?

Resolution: Fixed by Portability submission
Revised Text:
Actions taken:
October 14, 1996: received issue
January 2, 1998: closed issue

Discussion:


Issue 206: Implementation description (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: [Sec 16.9 Pg 16-15 CORBA2.0 p.32, Section 3.11 para 4: Seems to describe an implementation. Why is it specified. Is this how Sec. 3.10.1 para 14 issue is supposed to be addressed?

Resolution: Close no change. We do not have enough context to determine what the issue is.
Revised Text:
Actions taken:
October 11, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 207: C++ mapping complexity (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: [Sec 16.9 Pg 16-15 CORBA2.0 p. 32, Sec. 3.11  A comment nothing can be done about at thisstage. This section is way too complex. Goal is not to be natural C++ programmers !!!!

Resolution: Beyond scope of RTF - closed
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 208: Autoextension of sequences (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: [Sec 16.11 Pg 16-21 CORBA2.0  Since autoextension is not apparently supported, you should change "may" to "must"

Resolution: resolved and closed
Revised Text: Page 23-38, last line, change The programmer must always explicitly modify the current length of any sequence. to: The length of a sequence never changes without an explicit call to the length() member function.
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 209: Sequence implementation (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: {sec 16.11 Pg 16-22 CORBA2.0 p.38, Sec 3.13 para 7: Must an implementation REALLY implement a sequence as a contigous chunk of memory?

Resolution: Addressed by resolution to issue 75
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 210: State of release flag for sequence (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.11 Pg 16-22 CORBA2.0 If release is FALSE under these circumstances, old storage will not be freed before reallocation is performed. After realloc release TRUE or FALSE?

Resolution: Addressed by resolution to issue 75
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 211: Sequence maximum() call (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.11 Pg 16-22 CORBA2.0 p.38 Section 3.13 para11: It"s not clear how maximum()call is supposed to be used.

Resolution: Duplicate of issue 185 - closed
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 212: References returned from sequence operator[] after realloc (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.11 Pg 16-23 CORBA2.0 What happens to refs returned by operator[] when a realloc occurs? Are these invalid?

Resolution: clarified
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 213: Sequence lacks common features (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.11 Pg 16-23 CORBA2.0 p.38,sec 3.13 para 13  There is no auto extend, no inset,append, delete. It doesn"t seem like a sequence. Seems more like a resizable array. Could call it so.

Resolution: Beyond scope of RTF - closed
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 214: Sequence buffer types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.11 Pg 16-23 CORBA2.0 p. 39, Sec. 3.13 para 15  Why are you passing string buffers as char ** and object references as T_ptr*. There already is a type used for overloading assignment.

Resolution: Addressed by resolution to issue 75
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 215: C vs. C++ coding style (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.11.2 Pg 16-24 CORBA2.0 p. 40 Section 3.13.2, para 17 Looks like C, not C++

Resolution: Close no change. We do not have enough context to determine what the issue is.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 216: Sequence creation (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.11.2 Pg 16-25 CORBA2.0 How do I know how sequence was created. Must my code carry arround an extra piece of information saying how sequence was created?

Resolution: clarified
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 217: Copying of out parameters (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.11.2 Pg 16-25 CORBA2.0 p.41, section 3.13.2 para 21  Do I have to make an application level full copy? This doesn"t meet the performance goal outlined in the beginning

Resolution: Already resolved.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 218: Semantics of sequence length() operation (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.11 Pg 16-23 CORBA2.0  What is the semantics of the length() member? When can I do reallocation? Can it truncate? Can it realloc if length== current size?

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 219: Array slice example (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.12 Pg 16-27 CORBA 2.0  Why is a Long Array_slice declared to be a typedef Long[]? Why are these locked down rather than allowing a slice to be a class?

Resolution: resolved/closed
Revised Text: Close with explanation that, for arrays to be passed to functions, an array slice must be the element type of the array because when an array is passed as a function argument, it degenerates to a pointer to the array's row type. This means that, for an array type T with elements of type E, the slice type must be E.
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 220: Return value of operator[] for array var (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.12 Pg 16-27 CORBA2.o  Why are we returning a Long * from operator[] rather than an LongArray_slice&?

Resolution: Fixed by Portability submission
Revised Text:
Actions taken:
October 14, 1996: received issue
January 2, 1998: closed issue

Discussion:


Issue 221: Array_forany (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Do you anticipate end user"s instantiating the Array_forany class? Isn"t this a implementation detail? The name conflicts with IDL specifiable. Section should be removed.

Resolution: closed/resolved
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close with explanation that application code must use the array_forany class in order to insert and extract arrays of the correct
type. The helper class is necessary because, otherwise, there would be no way to distinguish among arrays of the same element
type, but of different length.


Issue 222: Global functions vs. T_var namespace (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.12 Pg 16-28 CORBA2.0 p. 44, sec 3.14 para 8: Why are these global functions rather than static methods of T_var?

Resolution: closed/resolved
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close with no change. I dug up the old 2.0 spec (96-08-04.pdf), but the question obviously refers to some draft version of the
document. Neither section numbers nor page numbers match. It appears impossible to identify the document to which the
question refers to. Since it was simply a question without a proposal or defect, we should close it.


Issue 223: Storage ownership issue (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: CORBA2.0 Care must be taken to avoid using T_var types with these extraction operators. They will try to assume responsibility for deleting storage owned by Any. Problem in mapping.

Resolution: Close with no change. That's how the mapping was designed to work.
Revised Text: In section 20.16.3 (Extraction from any), replace the sentence: Care must be taken to avoid using T_var types with these extraction operators, since they will try to assume responsibility for deleting the storage owned by the any. In its place, add the following sentence: An attempt to extract to a _var type is non-conforming and must cause a compile-time error.
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 224: Pointers vs. values (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec. 16.14.3 Pg 16-34 para 30 CORBA2.0 p.48, sec 3.16.3, para 26  Why is this specified. Why are pointers treated differently from Values. Primitives are not set to NULL

Resolution: Close with no change. It is no longer possible to identify the document to which the question refers
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 225: handling void* from Any (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Sec 16.14.6 Pg 16-38 para 44 CORBA2.0  How are you supposed to delete/duplicate this void* value if you don"t know the type? Do we have to emulate a C++ compiler

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 226: void* from Any for constructed types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: tables not present in CORBA2.0  What about structs, unions, exceptions, and arrays?

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 227: anonymus types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Tables not present in CORBA2.0 Aren"t anonymus sequences still allowed in structs, union, and exception?

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text: proposed resolution: Editorial change. Yes, they are
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 228: callee-allocated storage modification (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: CORBA2.0 Sec 16.18 Pg 16-45 para 9 The caller has sufficient knowledge to release, but not sufficient knowledge to know if contiguous. ("to allow..we adopt the policy....")

Resolution: Already resolved.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 229: Typo in table 3? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Pg 16-46 table 24 CORBA2.0  Shouldn"t arrays be by & for inout? This looks like a typo.

Resolution: clarified
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 230: _var types for fixed-length types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: LOW
Summary:
Summary: As a convenience for managing this pointer, the mapping also provides another class of each variable-length type. It also provides one for fixed-length types. You should say so

Resolution: clarified
Revised Text: proposed resolution: Editorial change
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 231: union accessors (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: LOW
Summary:
Summary: Accessors that return a reference to  a non-const object can be used for read-write access. They are provided only for following types: struct, union, sequence, any.Provede for all types..

Resolution: Close no change. This change is too intrusive and would break too much existing code.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 232: Mapping for IDL context (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: LOW
Summary:
Summary: If operation in an IDL spec. has a context spec, then a Context_ptr input parameter follows all operation specific arguments (OMGD 3.19) It should map to const Context_ptr

Resolution: Close with no change. Object references are always passed as a plain _ptr parameter and never as a c
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close with no change. Object references are always passed as a plain _ptr parameter and never as a const _ptr parameter.


Issue 234: accessor function on SystemException (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: LOW
Summary:
Summary: SystemException has accessor functions minor() and completed() rather than public data members like exceptions normally do. Normal mapping is to make exception data into public data members

Resolution: Close with no change.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close with no change. I agree, the discrepancy between user exceptions and system exceptions is jarring. However, there i too
much code out there that would break if we cleaned this up.


Issue 235: A_ptr and A_var should be distinct types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: LOW
Summary:
Summary: Sec 16.2.1 Pg 16-4 CORBA2.0 A_ptr and A_var need not be distinct. Since these types have distinct semantics, they need to be distinct (Section 3.5.1 para 4)

Resolution: Duplicate of issue 189 - closed
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 236: operator>>= on strings and object references (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: LOW
Summary:
Summary: Sec 16.12.2 Pg 16-27 CORBA2.0 Sun wants to add para.: Extraction operator>>= doesn"t free old storage, doesn"t pass old string to string_free, doesn"t invoke release on old object reference.

Resolution: Clarifying text added
Revised Text: editorial change
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 237: Allocated storage for out and return strings (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: LOW
Summary:
Summary: Sec 16.6 Pg 16-11 CORBA2.0: Sec D.12 states that client stub allocates buffer of specified size for bounded strings.This may result in unnecessary memory consumption.

Resolution: close with no change
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close no change. We believe the caller misread the text to say that the return buffer for bounded strings must always be the
maximum size, which is incorrect.


Issue 238: C++ namespaces (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: LOW
Summary:
Summary: Implementation dependent: Namespaces available/not available

Resolution: Close no change. Issue withdrawn by submitter.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 239: Implementation of parameter passing for T_var types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: LOW
Summary:
Summary: Implementation dependent: Implementation of parameter passing using T_var types

Resolution: Fixed by Portability submission
Revised Text:
Actions taken:
October 14, 1996: received issue
January 2, 1998: closed issue

Discussion:


Issue 240: Any and IN_COPY_VALUE (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: SERIOUS
Summary:
Summary: Binding spec states that implementation af Any must not store its value as reference or pointer to value passed into insertion operator <<= Any return pointer must not be NULL pointer...

Resolution: clarifying text added
Revised Text: Swee Boon Lim will send a proposal to the cxx_revision mailing list to change copy semantics to adoption semantics for the Any mapping type
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 241: allocbuf and initialization of elements (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: SERIOUS
Summary:
Summary: Sec 3.13.2 para 25describes allocbuf. Sun prefers that allocated sequence elements be initialized as if vector were allocated by sequence constructor

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 242: freebuf and destruction of elements (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: SERIOUS
Summary:
Summary: Sec 3.13.2 para 25 describes freebuf. It doesn"t specify if storage associated with each element is released, i.e deep-free. Sun prefers that freebuf deep-free...

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
October 14, 1996: received issue
July 5, 2000: 061300

Discussion:


Issue 244: RTTI vs. _narrow for exceptions (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: SERIOUS
Summary:
Summary: Since RTTI is not ubiquitous, the _narrow operations for Exceptions should be defined, even when RTTI available. They are trivial to implement using RTTI.

Resolution: Fixed by Portability submission
Revised Text:
Actions taken:
October 14, 1996: received issue
January 2, 1998: closed issue

Discussion:


Issue 245: accessor members for structs (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: Struct Mapping: IONA that accessor functions be provided for struct members. Direct access to member variables still available. Enhancement affords the user a consistent interface.

Resolution: Closed with no change
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close with no change. Accessor functions for structure members would have to have names that differ from the name of the
member because a C++ class cannot contain a data member and a member function that have the same name. However,
choosing a name for accessors is problematic because of potential name clashes with other members. In addition, making
stylistic changes like this now would complicate the mapping without substantial gain.


Issue 246: Access to sequence elements (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: At present sequence elements can only be accessed through operator[]. Public accessors be provided to allow a sequence to simultaneously be viewed as alinked list.

Resolution: Duplicate of issue 75 - closed
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 247: TypeCode mapping update for CORBA 2.) (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: It seems that the TypeCode mapping needs to be updated to reflect the TypeCode definition in Interface Repository Spec (p 64)

Resolution: TypeCode interface updated
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 248: nested ptr and var types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: ptr and var types for objrefs should be nested inside interface class, e.g A::ptr and A::var. Would make writing templates using these types easier.

Resolution: resolved, close issue
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 249: to/from string for Any type safety (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: We sure could use any_to/from_string<nnn> classes so that the type safe any api could be used for all IDL types

Resolution: Requested functionality added
Revised Text: Same as OMGCXX!.1-014-E
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 250: union accessors require temporaries (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: For structs and exceptions: Unions" access functions return primitives by value, not by refs.I need to use temporaries.Change them to refs

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 251: decompose Any into constituent primitives (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: Here is an extremely simple extension to the any type to allow decomposition of values to their constituent parts:                     <EXAMPLE issue251>

Resolution: Fixed by Portability submission
Revised Text:
Actions taken:
October 14, 1996: received issue
January 2, 1998: closed issue

Discussion:


Issue 252: T_copy for string and array (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: 

Resolution: Duplicate of issue 148 - closed
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 253: Name field for SystemExceptions (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: SystemException class should contain a string name field for easy printing of error messages,or operator<< should be overloaded for each system exception

Resolution: closed/resolved
Revised Text: Change the signature of CORBA::Exception on page 1-94 as follows: // C++ class Exception { public: virtual ~Exception(); virtual void _raise() const = 0; virtual const char * _name() const; virtual const char * _rep_id() const; }; Add the following text on page 1-109, preceding the para that introduces UserException: The _name() function returns the unqualified name of the exception. The _rep_id() function returns the repository ID of the exception.
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 254: iterating over Any primitives (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: There hsould be a way to access an unknown type inside an Any by "iterating" over the Any to examine the type in terms of the primitive types that make it up.

Resolution: Fixed by Portability submission
Revised Text:
Actions taken:
October 14, 1996: received issue
January 2, 1998: closed issue

Discussion:


Issue 255: Constructor taking discriminant as argument (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: Sec 3.12 para1 describes union constructors.Sun would like to add new constructor that takes as its sole argument a discriminant value.It initializes union according to specified discr. value

Resolution: Close with no change
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close with no change. The proposal would weaken the safety of union mapping (after we struggled for ages to make it safe). In
addition, the proposal would force every union class to carry code for default-initialization of union members. While we have
this functionality in DynAny, I don't think it is appropriate to force this into the static stubs as well.


Issue 256: Accessors for release flag of sequence (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: Sec 3.13.describes mapping for sequence.Accessor functions should be provided for release flag.Add following member functions: void release(Boolean), Boolean release() --pure accessors

Resolution: Duplicate of issue 75 - closed
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 257: Any release flag and operator<<= (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: Sec 3.16.2 para 11 describes lifetime of inserted value. Any should take over the inserted value(Sun) Avoids unnecessary copy for structured types listed in table 2

Resolution: requested functionality added
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 258: Accessors for the Any release flag (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: Sun would like to add the following accessors to Any:  Boolean release();  void release(Boolean);

Resolution: Close with no change
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close with no change. Adding a release() member to type Any would confuse the memory management issues further. There is
no point in having two API calls to achieve the same thing, and we can hardly deprecate the current one.


Issue 259: Accessor for exception id (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: The base exception class should include an accessor to get the exception id of an exception.It"s obtained from environment.Ability to get exception id is desirable in C++

Resolution: closed/resolved
Revised Text: Change the signature of CORBA::Exception on page 1-94 as follows: // C++ class Exception { public: virtual ~Exception(); virtual void _raise() const = 0; virtual const char * _name() const; virtual const char * _rep_id() const; }; Add the following text on page 1-109, preceding the para that introduces UserException: The _name() function returns the unqualified name of the exception. The _rep_id() function returns the repository ID of the exception.
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 260: Exception id for each exception type (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: C++ mapping should make available the exception id for each exception type.. Sun would like to revise sec. 3.17 to add following function: static const char * _exception_id();

Resolution: closed/resolved
Revised Text: Change the signature of CORBA::Exception on page 1-94 as follows: // C++ class Exception { public: virtual ~Exception(); virtual void _raise() const = 0; virtual const char * _name() const; virtual const char * _rep_id() const; }; Add the following text on page 1-109, preceding the para that introduces UserException: The _name() function returns the unqualified name of the exception. The _rep_id() function returns the repository ID of the exception.
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 261: TypeCode for each basic and IDL defined types (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: Sec 4.10 para 2: pseudo object reference of form _tc_<type> made available for basic and IDL defined types. Sun wants replacements with global function of form TypeCode_ptr _tc_<type>

Resolution: Close with no change
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close with no change. The type code constants have been with us in their present form since the day dot, and changing these to
functions now would achieve nothing except break code.


Issue 262: TypeCode interpreter (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: Sec 4.10 describes mapping for TypeCode. Sun proposes the following typecode interpreter interface: (available in /archives/issues/issue261)

Resolution: Fixed with issue 251
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 263: buffer classes for sequences (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: p41,sec 3.13.3,para 24: These functions should return buffers, not T* If you wanted a T* provide a conversion on returned buffer. No need to lock down implementation in this manner

Resolution: closed with no change
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close with no change. The sequence buffer functions have been a round a long time, and were updated with the 2.2 spec.
Mucking around with these again will make matters worse instead of better.


Issue 264: make String_var reference but not adopt (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: String_var could refer to memory without assuming memory management responsibilities for it, like void String_var::value(const char*, Boolean release = 0

Resolution: close with no change
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issdue

Discussion:
Close with no change. The _var type usage is so entrenched now that to change the memory-management behavior would
break just about every C++ CORBA program in existence.


Issue 265: explicit copy/adopt for String_var (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: Copying + adopting performed by String_var::operator= are very error-prone.Better to have explicit functions to copy, adopt,reference.(e.g void String_var::copy(const char*);

Resolution: handled by Portability submission - closed
Revised Text:
Actions taken:
October 14, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 266: operator<< for ostreams and Exceptions (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: ENHANCEMENT
Summary:
Summary: Exceptions could be formatted onto ostreams using operator<<..Examples available on /archives/issues/issue266

Resolution: closed/resolved
Revised Text: Insert the following text immediately before secion 1.19.1 on page 1-98 (so 1.19.1 becomes 1.19.2): 1.19.1 ostream Inserters Conforming implementations shall provide ostream inserters with the following signatures: ostream& operator<<(ostream &, const CORBA::Exception &); ostream& operator<<(ostream &, const CORBA::Exception *); These inserters print information about an exception on an ostream. The format and amount of detail of the printed information is implementation dependent. To guarantee that applications can control formatting of exceptions by providing custom overloaded inserters for more derived exception types, a conforming implementation must never provide overloaded inserters for SystemException, UserException or other more derived exception types.
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 267: ANy release flag and operator (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: LOW
Summary:
Summary: Sec 3.16.2 para 11 describes lifetime of inserted value. Since lifetime of the value is independent of value passed to operator<<=, Any must contain a copy of value.

Resolution: close with no change
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
Close with no change. It is clear that, by default, type Any makes a deep copy on insertion. In addition, consuming insertion is
possible too, so there is no issue.


Issue 268: C++ semantics vs. IDL semantics (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity: MEDIUM
Summary:
Summary: Isn"t it the mappings responsibility to decide how to project the semantics to the underlying "wire rep". You don"t need to put NULL on the wire. Sec 16.18 Pg 16-46 para 11 CORBA2.0

Resolution: Close no change. This change is too intrusive and would break too much existing code
Revised Text:
Actions taken:
October 14, 1996: received issue
June 13, 2000: closed issue

Discussion:
.


Issue 269: Default constructor for String_var (cxx_revision)

Click
here for this issue's archive.
Nature: ENHANCEMENT
Severity: Medium
Summary:
Summary: C++ mapping currently specifies that the default constructor for CORBA::String_var initializes the string to NULL Pointer. This is very inconvenient, in particular for structures

Resolution: Fixed as suggested by submitter
Revised Text:
Actions taken:
October 17, 1996: received issue
February 19, 1999: closed issue

Discussion:


Issue 290: u++ binding for ServerRequest pseudo object (cxx_revision)

Click
here for this issue's archive.
Nature: Interpretation
Severity: Medium
Summary:
Summary: Class defined for ServerRequest shows op_def() operation. Seems not to be in IDL for ServerRequest and there is no description in the rest of the section (CORBA 2 spec, Sect. 18.4.1)

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text: --related to issue128 orb_revision
Actions taken:
October 24, 1996: received issue
June 13, 2000: closed issue

Discussion:


Issue 456: Interpretation of _narrow semantics (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Section 16.3.4: Question on how to use _narrow with C++ bindings. Should  D::_narrow work? Does answer depend on interpretation of "actual (run-time) type"?

Resolution: fixed, close issue
Revised Text:
Actions taken:
November 16, 1996: received issue
February 23, 1999: issue closed

Discussion:


Issue 479: DII and DSI are useless with current Any (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Cannot use DII to invoke an operation that expects or returns a complex user-defined type. Any needs to provide member functions for composing Any"s containing arbitrary user-defined values

Resolution: Fixed by Portability submission
Revised Text:
Actions taken:
January 22, 1997: received issue
January 2, 1998: closed issue

Discussion:


Issue 480: Persistent Any values (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: It"s currently not possible for a C++ client or server to receive a parameter value of type Any, store that value in filesystem or a database and later reconstruct Any value from persistent represe

Resolution: Fixed by portability submission
Revised Text:
Actions taken:
January 22, 1997: received issue
January 2, 1998: closed issue

Discussion:


Issue 481: [q] intf name == op name (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Sentence in IDL spec "An identifier can only be defined once in a scope.However,identifiers can be redifined in nested scopes" seems to allow interface Foo { void Foo(in long 1); };

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification
Revised Text:
Actions taken:
January 22, 1997: received issue
June 13, 2000: closed issue

Discussion:
.


Issue 482: Defect with anonymus types in union mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: There are some serious inconsistencies in the union mapping. Spec. (page 16-18, para4 and page 16-19, para 1) The 2 paragraphs appear to be in conflict with each other.

Resolution: Fixed as suggested by submitter
Revised Text:
Actions taken:
January 25, 1997: received issue
February 19, 1999: closed issue

Discussion:


Issue 484: OMG C++ Mapping: Implicit Conversion Operators (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: I propose that public interface of _var types, the similar "smart pointer" types used in struct fields, and "smart pointer" types returned from sequence index operators be extended. (see file)

Resolution: Fixed by Portability submission
Revised Text:
Actions taken:
January 30, 1997: received issue
January 2, 1998: closed issue

Discussion:


Issue 496: Double underscore identifier mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: identifiers containing a double underscore[..] are reserved for use by C++ implementations and standard libraries and shall be avoided by users. IDL could be amended to prohibit double undersc.

Resolution: closed with no change
Revised Text:
Actions taken:
February 5, 1997: received issue
June 13, 2000: closed issue

Discussion:
Proposed Resolution:

Close with no change. True, double underscores technically invade the C++ compiler's namespace but, in practice, it is rarely
(never?) a problem.

Changing the IDL identifier rules to outlaw double underscore strikes me as a bit drastic too. (I'd rather not muck around in the
core unless we really have to.) Because I've never come across a case where this is a practical problem, we should close the
issue.


Issue 497: Legal IDL cannot map to C++ (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Generated C++ (example) ends up with redefinition errors. This is not addressed in current C++ mapping. Options are to amend IDL or to simply state that such IDL cannot be translated.

Resolution: close with no change
Revised Text:
Actions taken:
February 5, 1997: received issue
June 13, 2000: closed issue

Discussion:
Close with no change. It's ugly to have these name clashes in the mapping, but the steps required to fix this aren't pretty either,
and the name clash is rarely (never?) a problem in practice.


Issue 501: Bug in C++ NVList mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: NVList has an item () operation, which returns a NamedValue reference. The same special memory management rules should apply to item().

Resolution: Fixed by portability submission
Revised Text: Suggestion: Specify that item() also retains ownership of the reference it returns
Actions taken:
February 20, 1997: received issue
January 2, 1998: closed issue

Discussion:


Issue 594: Boolean type left undefined by C++ mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: CORBA::Boolean can be mapped to totally non-sensical things such as structs, class, type double, type long etc. There are no guarantees about size of underlying type given to implementor

Resolution: resolved, close issue
Revised Text:
Actions taken:
June 18, 1997: received issue
February 19, 1999: closed issue, resolved

Discussion:


Issue 599: const method qualification should be removed (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: C++ mapping for pseudo request class contains const member functions mapped from readonly attributes. IDL does not define C++ mapping for readonly attribs to const member functions.

Resolution: close with no change
Revised Text:
Actions taken:
July 9, 1997: received issue
July 24, 1997: reasigned to cxx_revision
June 13, 2000: closed issue

Discussion:
Close with no change. The fact that IDL doesn't have const operations doesn't mean that member functions in the C++
mapping can't be const. In addition, making this change now can cause code that currently works to no longer compile.


Issue 600: String_var and Any_var are missing the T_ptr definition (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Appendix E page E-2 and E-3: String_var and Any_var classes are missing T_ptr definition that occurs in the template for var types. These should be added for completness.

Resolution: Close with no change. Only object reference types have _ptr type. They do not apply to strings or ty
Revised Text:
Actions taken:
July 9, 1997: received issue
July 24, 1997: reassigned to cxx_revision
June 13, 2000: closed issue

Discussion:
Close with no change. Only object reference types have _ptr type. They do not apply to strings or type Any.


Issue 601: Section 17..13.1 release()method should be added to mappping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: The Object IDL contains a release() mmethod that is not mapped in the C++ mapping. This method should be added in the mapping

Resolution: clarified
Revised Text:
Actions taken:
July 9, 1997: received issue
February 19, 1999: closed issue

Discussion:


Issue 605: Section 8.2: set_exception() supported by BOA? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: The BOA interface defined a method called set_exception(). This is not present in the IDL in section 17.17. Does the BOA support this method or not?

Resolution: clarified
Revised Text:
Actions taken:
July 9, 1997: received issue
July 24, 1997: reassigned to cxx_revision
February 19, 1999: closed issue

Discussion:
 closed issue


Issue 608: Interface definition must be standardized (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: IDL for Object Interface differs from that provided by core specification in section 7.2 page 7.2

Resolution: Close with no change. The relevant functions are shown in the latest C++ mapping.
Revised Text:
Actions taken:
July 9, 1997: received issue
July 24, 1997: reassigned to cxx_revision
June 13, 2000: closed issue

Discussion:


Issue 615: POA_*_tie classes in 18.1.4 can"t be supported (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: If C++ compiler doesn"t support namespaces or templates defined inside classes, POA_*_tie classes in 18.1.4 cannot be supported within specified scopes.

Resolution: resolved, close issue
Revised Text:
Actions taken:
July 11, 1997: received issue
February 19, 1999: closed issue, resolved

Discussion:


Issue 617: Why does get_principal() take an Environment parameter (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: When this IDL is mapped into C++ for a non-EH target compiler, won"t this method end up having 2 environment parameters?. This is only IDL in current spec that takes environment parameter

Resolution: Duplicate of issue 191 - closed
Revised Text:
Actions taken:
July 14, 1997: received issue
February 19, 1999: closed issue

Discussion:


Issue 618: IDL from Ennvironment has invalid attribute (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: IDL from Environment has an attribute called "exception" which is invalid. This member should be renammed to "ex"or some other name which is a legal identifier

Resolution: Close no change. Environment is defined as PIDL, so this is legal.
Revised Text:
Actions taken:
July 14, 1997: received issue
June 18, 2000: closed issue

Discussion:


Issue 621: C mapping for list_initial_services is incorrect (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Section 14.29: The C mapping for list_initial_services is incorrect and should return a pointer to a sequence (example in corresponding archive file)

Resolution: Fixed in CORBA 2.2 editing process
Revised Text:
Actions taken:
July 9, 1997: received issue
February 26, 1998: closed issue

Discussion:


Issue 622: Section 16.2, Section 16.6: editorial (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Section 16.2: "A shown" should be "As shown".  Section 16.6: The title is incorrect "TMapping" remove the "T"

Resolution: Close as fixed. A search through the current draft does not locate either of the two typos mentioned
Revised Text:
Actions taken:
July 9, 1997: received issue
June 23, 1998: moved from orb_revision to cxx_revision
June 13, 2000: closed issue

Discussion:
Close as fixed. A search through the current draft does not locate either of the two typos mentioned.


Issue 627: PortableServer:ObjectId_tow_wstring() and string_to_ObjectId() (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: PortableServer::ObjectId_to_wstring() and string_to_ObjectId() are written (*in section 18.4) using the "wchar_t" type. Shouldn"t they use the CORBA::wchar type instead?

Resolution: Fixed in CORBA 2.2 editing process
Revised Text:
Actions taken:
July 16, 1997: received issue
January 2, 1998: closed issue
May 8, 1998: transferred from port-rtf to cxx_revision
February 19, 1999: closed issue, resolved

Discussion:
 transferred from port-rtf to cxx_revision


Issue 637: Section 18.1.2: _this() and IMPLICIT_ACTIVATION need clarification (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Section states that _this() can implicitly activate servant if IMPLICIT_ACTIVATION applies. _this() does not have a way to specify which POA is to be used for the activation

Resolution: resolved, close issue
Revised Text:
Actions taken:
July 30, 1997: received issue
May 12, 1998: issue transferred from port-rtf to cxx_revision
February 19, 1999: closed issue, resolved

Discussion:
 closed issue, resolved


Issue 646: Blocking semantics of get_next_response not well specified (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: The semantics of get_next_response sec 4.3.4 are not well-defined with respect to blocking behavior. There is no explicit description of the behavior of the C++ routines

Resolution: resolved, issue closed
Revised Text: Replace the 5th bullet point on page 23-118 of ptc/99-03-04 with: The get_response operation does not take a flag argument. If invoked before the request has completed, get_response blocks until the request completes; if invoked after the request has completed, get_response returns immediately. The poll_response operation returns immediately. A true return value indicates that the request has completed. A false return value indicates that the reply for the request is still outstanding.
Actions taken:
July 31, 1997: received issue
June 13, 2000: closed issue

Discussion:


Issue 647: include files (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: There seems to be nothing in the spec that specifies the name of the include files for things in the CORBA module (e.g. type definitions). Add such a requirement to each language mapping

Resolution:
Revised Text:
Actions taken:
August 1, 1997: received issue

Discussion:


Issue 653: sec. 18.1.2: explicit information on _this() is missing (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: The discussion of how _this() operates is missing explicit information about what to do if there is no request context. Should _this() return nil reference, or should exception be thrown

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
August 5, 1997: received issue
May 12, 1998: issue moved from port-rtf to cxx_revision
June 13, 2000: closed issue

Discussion:


Issue 663: Implementation problem with policy objects using root POA (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: It appears to be impossible to implement the policy objects using the root POA due to race conditions on the Polilicy::destroy() operation. There appears to be no safe time to delete servant

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
August 9, 1997: received issue
February 25, 1999: moved to cxx_revision
June 13, 2000: closed issue

Discussion:


Issue 673: C++ mapping of servants may result in ambigous run-time behavior (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: If the same servant and ObjectId are registered with two POAs, _this() can"t know which object to return outside of a method invokation

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
August 11, 1997: received issue
May 12, 1998: issue moved from port-rtf to cxx_revision
June 13, 2000: closed issue

Discussion:


Issue 674: Multiple inheritance of C++ Servants is ill-defined (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: Please find example/discussion in corresponding archive file

Resolution: closed and resolved
Revised Text: Add the following to the end of section 1.36.6 of formal/99-07-41: For interfaces which inherit from one or more base interfaces, the generated POA skeleton class uses virtual inheritance: // IDL interface A { ... }; interface B : A { ... }; interface C : A { ... }; interface D : B, C { ... }; // C++ class POA_A : public virtual PortableServer::ServantBase { ... }; class POA_B : public virtual POA_A { ... }; class POA_C : public virtual POA_A { ... }; class POA_D : public virtual POA_B, public virtual POA_A { ... }; 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: // C++ class A_impl: public virtual POA_A { ... }; class B_impl: public virtual POA_B, public virtual A_impl {}; For interfaces which inherit from an abstract interface, the POA skeleton class is also virtually derived directly from the abstract interface class, but with protected access: // IDL abstract interface A { ... }; interface B : A { ... }; // C++ class A { ... }; class POA_B : public virtual PortableServer::ServantBase, protected virtual A { ... }; The abstract interface is inherited with protected access to prevent accidental conversion of the POA skeleton pointer to an abstract interface reference, for ORBs which implement object references as pointers. This also allows implementation classes and valutypes to share an implementation of the abstract interface: // IDL valuetype V : supports A { ... }; // C++ class MyA : virtual A { ... }; class MyB : public virtual POA_B, protected virtual MyA { ... }; class MyV : public virtual V, public virtual MyA { ... };
Actions taken:
August 11, 1997: received issue
May 12, 1998: issue moved from port-rtf to cxx_revision
June 13, 2000: closed issue

Discussion:


Issue 678: inout strings modifiable? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: C++ mapping spec should be clearer about the rules for inout strings.There are currently two possible interpretations of what server can do with an inout string (details in archive)

Resolution: resolverd and closed
Revised Text:
Actions taken:
August 18, 1997: received issue
June 13, 2000: closed issue

Discussion:
Close as fixed. The relevant example text now appears on page 23-103 of 99-03-04.


Issue 705: C and C++ Mapping question (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: IDL spec states that identifiers can have characters that are things like an A with accent aigu, or a german script B. Can IDL identifiers have these characters? How are they mapped ontoC/C++?

Resolution: Close as non-issue. IDL no longer permits non-ASCII letters in identifiers.
Revised Text:
Actions taken:
August 23, 1997: received issue
June 13, 2000: closed issue

Discussion:


Issue 721: Bounded strings (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: The C++ mapping basically ignores bounded strings and maps them to char* What should happen if I assign a string that is too long to a bounded string? No statement is made

Resolution: resolved, close issue
Revised Text:
Actions taken:
September 18, 1997: received issue
February 19, 1999: closed issue, resolved

Discussion:


Issue 722: Wide string allocation (1) (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: There is no wstring_dup(). For symmetrie with string_dup(), I would suggest to create wstring_dup() as well

Resolution: closed issue, fixed
Revised Text:
Actions taken:
September 17, 1997: received issue
February 19, 1999: closed issue, fixed

Discussion:


Issue 723: Wide string allocation (2) (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized
Severity:
Summary:
Summary: There is no statement about the terminating zero value. Is room allocated for it or not?For symmetrie with string_alloc() I suggest that wstring_alloc() also should allocate more room.

Resolution: Fixed with issue 722
Revised Text:
Actions taken:
September 17, 1997: received issue
February 19, 1999: closed issue

Discussion:


Issue 731: IDL generated C++ types and stream operators (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary:
Summary: Most ORBs provide overloaded operators to inject String_var values into ostream, istream, on ifstream. Problem: C++ does not make these operators mandatory, so every time I use one of them, I am writing non-portable and proprietary code. Nail those operators down and make them mandatory in the spec

Resolution: Fixed, requirements added
Revised Text:
Actions taken:
September 24, 1997: received issue
February 19, 1999: closed issue

Discussion:


Issue 732: Typo in C++ mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary:
Summary: C++ mapping in CORBA 2.1 has a typo in the array mapping (section 18.15 page 18-33).Same typo appears in orbos/97-05-15 in section 16.12 page 16-33. It would be nice to actually show the C++ definitions for the types F, V, and M. Find details in corresponding file

Resolution: Fixed in CORBA 2.2 editing process
Revised Text:
Actions taken:
September 25, 1997: received issue
February 26, 1998: closed issue

Discussion:


Issue 781: C++ mapping for IN object references (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity: Significant
Summary:
Summary: According to C++ mapping spec in the POA document (table 2, section 16.18.1) the signature for an  object reference in argument should be "objref_ptr", not the more likely "const objref_ptr". this is an conflict with the convention for all other in args except numeric, and is in contrast with the table 3, that specifies "const objref_var&".

Resolution: Duplicate of issue 188 - closed
Revised Text:
Actions taken:
November 19, 1997: received issue
November 25, 1997: moved to cxx_revision
February 19, 1999: closed issue

Discussion:
 closed issue


Issue 800: Missing Mappings for Object (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity: Significant
Summary:
Summary: The C++ mapping currently lack mappings for is_a(), is_equivalent(),
 hash(), and non_existent(). These need to be added. The question is, which of these operations can validly be invoked on
 a nil reference, because that affects the mapping. My thinking is that
 all of these should be allowed for nil references.
 
 
 

Resolution: closed with no change
Revised Text:
Actions taken:
December 5, 1997: received issue
March 19, 1999: closed issue

Discussion:
Close with no change. These functions are mapped following the normal C++ mapping rules. The proposed
change for adding helper functions to the CORBA module is too intrusive and is not deemed to be valuable enough to add.


Issue 801: Alias type codes in any values (cxx_revision)

Click
here for this issue's archive. Click here for this issue's attachments.
Nature: Uncategorized Issue
Severity: Significant
Summary:
Summary: I believe the spec should be updated to explicitly require the following
 to be safe:        a1.replace(a1.type(), a1.value(), false);
 In other words, an Any should be obliged to detect assignment to self
 for the passed void *. Reason: The above is the only way I can see
 to get a tk_alias type code into an any, so the receiver can tell the
 difference between a date and an address.
 
 

Resolution: Close issue with no change -- already resolved in section 20.16.8.
Revised Text:
Actions taken:
December 12, 1997: received issue
March 19, 1999: closed issue

Discussion:


Issue 803: C++ mapping: missing from_wchar and to_wchar (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary:
Summary: The C++ mapping states that "wchar" is not required map onto a 
 unique C++ type.  Yet in 18.17.4, the mapping fails to define the
 from_wchar and to_wchar struct types and associated <<= and >>=
 operators for inserting and extract wide chars into anys.  This
 also needs to be fixed in appendix A.6 of section 18.
 

Resolution:
Revised Text:
Actions taken:
December 2, 1997: received issue
February 19, 1999: closed issue, fixed

Discussion:
 fixed


Issue 804: Typos in PIDL to C++ mappings (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary:
Summary: I think that there is a pervasive Typo in Appendix A of chapter 18.
 A number of the PIDL classes include a member function _duplicate.
 It should be declared as a static member function
 with an argument; i.e. the pointer to be "duplicated".
 

Resolution:
Revised Text:
Actions taken:
December 4, 1997: received issue
February 26, 1998: closed issue

Discussion:


Issue 863: Read-only restrictions on parameters (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  A variable-length in parameter is read-only in the
 server, and a variable-length out parameter or return value is read-only
 in the client. I believe the restriction is too harsh to be useful, and the optimization
 permitted by the restriction is not worth it.
 
 

Resolution: Clarifying text added, fixed
Revised Text: Lift the restriction. No ORB that we are aware of makes use of the possible optimizations, and the restriction places unnecessary burdens on application developers. Revised Text: On page 20-109 of ptc/98-09-03, delete starting from paragraph beginning with: The ORB is permitted to allocate a single contiguous area of storage for all data associated with a variable-length parameter. This permits an ORB to, for example, unmarshal a sequence of... Delete all text up to and including the paragraph ending with: ... but calling delete on a pointer to const object is an error. A compliant mapping implementation therefore is not required to detect this error. Also delete footnote 17. Actions taken:
Actions taken:
January 5, 1998: received issue
February 19, 1999: closed issue

Discussion:


Issue 902: CORBA::Bounds and CORBA::TypeCode::Bounds (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The C++ mapping uses a Bounds exception in the PIDL for NVList (page 17-6). This is the first time that the Bounds exception is mentioned (as far as I can see). There is no exception declaration for Bounds in the PIDL. This raises the questions:
 1) Does Bounds have data members or not?
 2) At what scope should Bounds be defined?
 	   Given that the Bounds exception is also used by the
 	   Request interface, I suspect what is meant is CORBA::Bounds.
 The TypeCode interface also uses a Bounds exception. It is explicitly
 declared in the scope of the TypeCode interface (page 17-15):
 It would be nice to only have one of these, probably CORBA::Bounds, and
 to add the missing declaration.
 
 
 
 

Resolution: resolved, close issue
Revised Text:
Actions taken:
January 13, 1998: received issue
February 19, 1999: closed issue, resolved

Discussion:


Issue 914: Mappings for hash, is_equivalent, _is_a and _non_existent (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The C++ mapping for CORBA::Object does not specify the mappings for
 hash, is_equivalent, is_a and non_existent methods. I am assuming
 these map to _hash, _is_equivalent, _is_a and _non_existent. Is this
 correct ?
 

Resolution: duplicate of issue # 800, closed
Revised Text:
Actions taken:
January 19, 1998: received issue
January 27, 1998: closed issue..same as issue 800

Discussion:


Issue 920: ServantBase mappings (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Should the C++ mapping for ServantBase also have _duplicate,
 _var mappings ?  For example if get_servant is called on POA, what
 are the ownership rules for the returned Servant. It seems providing
 a _duplicate, _release operations on ServantBase might be useful. These
 operations could be used to ensure that the Servant is not released
 while the caller has a reference to it.
 

Resolution: resolved and closed in ptc/1998-09-03
Revised Text:
Actions taken:
January 27, 1998: received issue
July 6, 2000: closed issue

Discussion:


Issue 932: Semantics of >>= operator in C++ mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: According to the IIOP protocol specification, it is possible to receive 
 an any with a TypeCode which doesn"t include names, member names and 
 repository ids.
 However, it is not clear what the behaviour of the >>= operator is in the C++
 mapping for these cases.   What happens if I  receive an any value from 
 a remote ORB which didn"t encode names, member names and repository ids ? Is 
 it posible to extract its value using the so-called "type-safe" operator >>= ?
 

Resolution: closed with no change
Revised Text: Close as fixed. The TypeCode::equivalent() function determines whether or not extraction succeeds.
Actions taken:
January 28, 1998: received issue
June 22, 1998: moved from orb_revision to cxx_revision
March 19, 1999: closed issue

Discussion:
Close 932 without change. The core already states that optional strings in type codes are the empty string, so it
follows that extraction of such a string results in an empty string. The remainder of the issue was resolved with the definition of
TypeCode::equivalent().


Issue 933: CORBA::ORB::InvalidName ambigious in C++ mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: In section 5.6:
 
 // PIDL
 module CORBA {
   interface ORB {
     exception InvalidName {};
   };
 };
 
 In section A.24:
 
 // C++
 class ORB {
 public:
   class InvalidName {...};
 };
 
 The C++ mapping should be clarified to show that this is indeed a user
 exception.
 

Resolution:
Revised Text:
Actions taken:
January 30, 1998: received issue
February 19, 1999: closed issue, resolved

Discussion:


Issue 956: No conversion defined from a B_var to an A_ptr (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: I was writing some C++ code and noticed that the following doesn"t work:
 
 // IDL
 
 interface A {
 };
 
 interface B : A {
 };
 
 // C++
 
     B_var    bv = get_b_from_somewhere();
     A_var    av = A::_duplicate(bv);
 
 because there is no conversion defined from a B_var to an A_ptr.  Is
 there a way that this could be added to the language binding without
 ambiguity problems?
 

Resolution: close with no change
Revised Text:
Actions taken:
February 11, 1998: received issue
June 13, 2000: closed issue

Discussion:
Close no change. The needed widening can easily be achieved using the B_var::in() function like this: 

A_var av = A::_duplicate(bv.in());


Issue 1056: Fixed types in orbos/98-01-11 (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: On page 20-36, near the top, the mapping says:
 
 	A T_out type for a Fixed type is defined as typedef to a
 	reference to the Fixed type, with the digits and scale added to
 	the name to disambiguate it. For example, the name of the T_out
 	type for the type Fixed<5,2> is Fixed_5_2_out:
 
 	// C++
 	typedef Fixed<5, 2>& Fixed_5_2_out;
 
 This doesn"t appear to work for fixed types with negative scale. For example:
 

Resolution:
Revised Text:
Actions taken:
March 17, 1998: received issue
February 23, 1999: close issue

Discussion:


Issue 1069: Typos on p 20-34 of orbos/98-01-11 (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary:
Summary: page 20-34 of orbos/98-01-11 contains a few typos:
 
 1)
 	template<CORBA::UShort d, Short s>
 
    should be
 
 	template<CORBA::UShort d, CORBA::Short s>
 
 2)
 	operator LongDouble() const;
 
    should be
 
 	operator CORBA::LongDouble() const;
 
 3)
 
 	template<unsigned short d1, short s1, unsigned short d2, short s2)
 
    should use CORBA types and use a closing ">" instead of ")":
 
 	template<
 		CORBA::UShort d1,
 		CORBA::Short s1,
 		CORBA::UShort d2,
 		CORBA::Short s2
 	>				// Note closing ">"
 

Resolution:
Revised Text:
Actions taken:
March 18, 1998: received issue
February 19, 1999: closed issue, resolved

Discussion:


Issue 1070: macros for fixed arithmetic results (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The fixed mapping says on page 20-35 of orbos/98-01-11:
 
 	One way to do this is to declare the result types with a macro
 	that evaluates to the approate values, based on the digits and
 	scale of the operands:
 
 	// Example of Fixed result type declaraction
 	// Fixed<_FIXED_ADD_TYPE(d1,s1,d2,s2)> -> Fixed<dr,sr>
 
 I think the name of the macro for each rule needs to be nailed down.
 

Resolution:
Revised Text:
Actions taken:
March 18, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1072: fixed_digits and fixed_scale member functions (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Page 20-34 of CORBA 2.2 shows member functions of the Fixed template:
 
 	CORBA::UShort fixed_digits() const;
 	CORBA::Short fixed_scale() const;
 
 There are no semantics specified for these. I assume they return the
 number of the respective digits passed to the template? For example, given
 
 	Fixed<5,2> x;
 
 	assert(x.fixed_digits() == 5);
 	assert(x.fixed_scale() == 2);
 
 Is this the correct interpretation? If so, the spec should say so (otherwise,
 I might, for example, expect that fixed_digits returns 3 and fixed_scale
 return 2).
 

Resolution:
Revised Text: :UShort fixed_digits() const;
Actions taken:
March 19, 1998: received issue
June 24, 1998: moved from orb_revision to cxx_revision
February 23, 1999: closed issue

Discussion:


Issue 1073: Missing constructor for Fixed (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Type Fixed has constructors for LongDouble and int. This causes
 a few initialization problems. For example:
 
 	Fixed<8,2> x = 6.75;
 	Fixed<8,2> y = 10L;
 	Fixed<8,2> z = 10U;
 
 None of these will compile because of the ambiguity as to whether to use
 the int or the LongDouble constructor.
 
 I think Fixed will need additional constructors to allow initialization
 from float, double, long and unsigned values.
 

Resolution:
Revised Text:
Actions taken:
March 19, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1092: C++ mapping for fixed is broken (01) (cxx_revision)

Click
here for this issue's archive.
Nature:
Severity:
Summary:
Summary: 1.  If the C++ target environment does not support namespaces and/or
 nested template class definitions, then it is impossible to implement
 the Fixed template type as part of the CORBA module.
 

Resolution:
Revised Text:
Actions taken:
March 21, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1093: C++ mapping for fixed is broken (02) (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity: Significant
Summary:
Summary: 2.  The mapping for the "_out" type for Fixed is broken.  It is
 specified as a typedef, for example "Fixed<3,1>" maps to:
 
     typedef Fixed<3,1> &Fixed_3_1_out;
 
 but the IDL grammar allows fixed types to be declared as attribute
 types, operation parameters and return values.  This causes problems
 because it is no longer obvious where to declare the _out type for an
 out parameter.
 

Resolution: Close as fixed. The new Fixed mapping takes care of this.
Revised Text:
Actions taken:
March 21, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 1095: Old References in C++ mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: orbos/98-01-11 contains some stale references. For example, on page 20-18:
 
 	...
 	private:
 		// hidden assignment operators for var types to
 		// fulfill the fules specified in
 		// Section 19.3.2
 	};
 
 	The definition for the A_out type is the same as the one shown
 	in Section 19.3.6.
 
 These should now refer to Section 20.
 

Resolution: Close without change. Already fixed.
Revised Text:
Actions taken:
March 23, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 1115: TypeCode_ptr base_typecode(TypeCode_ptr tc) (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity: Significant
Summary:
Summary: Look at this code and tell me what is wrong with it (CORBA:: left off
 for simplicity):
 So, now the question is:  Inside the
 TypeCode_var::operator=(TypeCode_ptr tc)
 assignment operator, when tc == this, what should happen?
 
 Should this call release(this) to satisfy the requirements of code frag
 #3?  Or should it be a noop to satisfy the requirements of code frag #4?
 

Resolution: Close no change. The submitter of the issue misunderstood _var reference counting semantics.
Revised Text:
Actions taken:
April 6, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 1124: C++ Fixed type issue (01) (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: 1) Page 20-34: the unary + and - operators in the Fixed class should
 return by value, not by reference.
 

Resolution:
Revised Text:
Actions taken:
March 31, 1998: received issue
February 23, 1999: closed issue

Discussion:
 received issue


Issue 1125: Fixed type (02) (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: 2) Page 20-35: the semantics of the istream extraction and ostream
 insertion functions are totally unspecified -- what formats are used
 to read and write Fixed types?
 

Resolution:
Revised Text:
Actions taken:
March 31, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1126: C++ Fixed Type (03) (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: 3) Page 20-35: the +=, -=, *=, and /= operators are required by the
 C++ language to be member functions, not global functions. They
 should be moved into the Fixed class and should return a reference to
 *this, not a value.
 

Resolution:
Revised Text:
Actions taken:
March 31, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1128: String member initialization (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: orbos/98-01-11 doesn"t initialize string members if they are inside
 a sequence or array.
 
 For consistency, it would be better to adopt the following:
 
 	- A plain String_var is default-constructed to contain a
 	  null pointer (like all other _var types).
 
 	- If a structure, exception, sequence, or array contains
 	  a string, that string is initialized to the empty string
 	  when default-constructed. In case of a sequence of strings,
 	  this means that strings are default-constructed to the
 	  empty string when the sequence is extended.
 
 

Resolution:
Revised Text:
Actions taken:
April 1, 1998: received issue
February 19, 1999: closed issue, resolved

Discussion:


Issue 1134: C++ Sequence mapping Question (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Section 20.13 states:
 
 "For each different named OMG IDL sequence type, a compliant
 implementation provides a separate C++ sequence type."
 
 This certainly means that each declared sequence with a different bound
 and component type maps to a unique C++ class.  But how about this:
 
 // IDL
 typedef sequence<long>	LongSeq1;
 typedef sequence<long>	LongSeq2;
 
 Are LongSeq1 & LongSeq2 mapped to the same or different C++ classes?
 

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
April 7, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 1137: Typos in parameter passing rules (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: page 20-74 of orbos/98-01-11 shows the tables for the parameter passing
 rules. There are six notes on page 20-76 that are meant to be referenced
 by the tables. However, those references are no longer correct.
 
 For example, the array parameter passing rules in table 19-2 (should be
 table 20-2) have the index 2, but note 2 actually refers to the rules
 for passing references.
 
 Notes 3 to 6 are no longer referenced by the table, but should be.
 

Resolution:
Revised Text:
Actions taken:
March 30, 1998: received issueq
April 16, 1998: closed issue

Discussion:


Issue 1148: Typo in orbos/98-01-11 (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity: Minor
Summary:
Summary: Page 20-74, para 1:
 
 	... original specified except the first oneA caller is ...
 
 Should be
 
 	... original specified except the first one. A caller is ...
 

Resolution:
Revised Text:
Actions taken:
April 17, 1998: received issue
February 19, 1999: closed issue

Discussion:


Issue 1149: _out parameter typo (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity: Minor
Summary:
Summary: orbos/98-01-11 contains a typo on page 20-20.
 
 The last line of Table 19-1 shows CORBA::Octet in the "C++ Out Type"
 column. This should be CORBA::Octet_out instead.
 

Resolution:
Revised Text: :Octet in the "C++ Out Type"
Actions taken:
April 17, 1998: received issue
February 19, 1999: closed issue

Discussion:


Issue 1289: How to put a generic CORBA exception into an Any (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: There doesn"t appear to be any way to place an arbitrary exception into
 an Any with the current C++ mapping.  This is necessary to make the DSI
 usefulThe spec needs to be extended to provide an inserter function to insert
 a CORBA::Exception into an Any.  I know that this has potential issue
 for the inserter function to determine the correct typecode for the
 exception, but I can"t think of any other way to get an exception into
 the Any when all I"ve got is a CORBA::Exception * without having to
 enumerate each possible exception by calling _narrow.
 

Resolution:
Revised Text:
Actions taken:
April 29, 1998: received issue
February 19, 1999: closed issue, resolved

Discussion:


Issue 1319: C++ Any mapping proposed change (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: Add the following operation to CORBA::Any:
 
 class Any {
     ...
     void type(TypeCode_ptr);
     ...
 };
 
 This will replace the internal typecode in the any with the specified
 typecode.  If the new typecode is not equivalent to the old typecode (as
 defined by TypeCode::equivalent), then implementation will raise the
 BAD_TYPECODE system exception.
 

Resolution:
Revised Text:
Actions taken:
May 12, 1998: received issue
February 23, 1999: close issue

Discussion:


Issue 1383: Missing operators in orbos/98-01-11 (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: the Any class shown on page 20-115 of 98-01-11 appears to be missing
 support for some of the new IDL types. In particular, no operators
 are shown for (unsigned and signed) long long and long double.
 
 Also, there is no operator to insert an *unbounded* *wide* string.
 

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
May 18, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 1384: Mapping for wide strings (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: the spec doesn"t say what the type CORBA::WChar should map to. Presumably,
 it should be wchar_t? If so, I think this should be stated.
 
 It is important to nail this down because of overloading ambiguities. For
 example, if CORBA::WChar * is allowed to be the same as char *, then
 we cannot use the overloaded <<= operator to insert unbounded wide strings
 into an Any.
 

Resolution: Fix the mapping to specify what WChar maps to.
Revised Text: On page 20-24 of ptc/98-09-03, change the paragraph: Except for boolean, char, and octet, the mappings for basic types must be distinguishable from each other for the purposes of overloading. That is, one can safely write overloaded C++ functions on Short, UShort, Long, ULong, Float, and Double. To read: Types Boolean, Char, and Octet may all map to the same underlying C++ type. This means that these types may not be distinguishable for the purposes of overloading. Type WChar maps to wchar_t in standard C++ environments or, for non-standard C++ environments, may also map to one of the integer types. This means that WChar may not be distinguishable from integer types for the purposes of overloading. All other mapping sfor basic types are distinguishable for the purposes of overlaoding; that is, one can safely write overloaded C++ functions on Short, UShort, Long, ULong, LongLong, Float, Double, and LongDouble. On page 20-59, add the following text to the paragraph introducing the overloaded string insertion operators: Note that insertion of wide strings in this manner depends on standard C++, in which wchar_t is a distinct type. Code that must be portable across standard and older C++ compilers must use the from_wstring helper type. Add a footnote to the second bullet on page 20-62: Note that extraction of wide strings in this manner depends on standard C++, in which wchar_t is a distinct type. Code that must be portable across standard and older C++ compilers must use the to_wstring helper type. Add the missing insertion and extraction operators for wide strings to the Any class on page 20-159: void operator<<=(const WChar *); Boolean operator>>=(WChar * &) const;
Actions taken:
May 19, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 1386: Any and WChar issue (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The C++ mapping requires that attempt to insert a Boolean, Octet, or
 Char value into an any must generate a compile-time error:
 
 	CORBA::Any a;
 	CORBA::Char c = "x";
 	a <<= c;			// Compile-time error
 
 The spec says nothing about WChar and WChar *. This implies that no such
 guarantee exists. However, I don"t think it would hurt to spell this out:
 
 	CORBA::Any a;
 	CORBA::WChar wc = L"x";
 	a <<= wc;			// Undefined behavior
 
 

Resolution: closed, fixed
Revised Text: nsert the following text on page 20-59 of ptc/98-09-03, prior to the paragraph beginning with "Because valuetypes": Note that the following code has undefined behavior in non-standard C++ environments: CORBA::Any a; CORBA::WChar wc = L'x'; a <<= wc; // Undefined behavior This code may erroneously insert an integer type in environments where wchar_t is not a distinct type. On page 20-62, preceding the para beginning with "For non-primitive types...", insert the following text: Note that the following code has undefined behavior in non-standard C++ environments: CORBA::Any a = ...; CORBA::WChar wc; a >>= wc; // Undefined behavior This code may erroneously extract an integer type in environments where wchar_t is not a distinct type. Add the following text as the final paragraph of 20.16.4: In standard C++ environments, the mapping must declare the from_* and to_* constructors as explicit. This prevents undesirable conversions via temporaries.
Actions taken:
May 19, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 1418: C++ _var type widening proposal (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Michi Henning & Steve Vinoski have previously challenged people to come
 up with a modification to the C++ language mapping that would allow for
 type safe widening of object reference _var types for assignment or copy
 construction.  I believe I have come up with the solution, and Michi
 agrees with me:
 
 Proposal:
 
 For object reference _var types, replace the copy and assignment
 operators:
 
 class T_var {
 public:
     ...
     T_var(const T_var &);
     
     T_var &operator = (const T_var &);
     ...
 };
 
 with:
 
 class T_var {
 public:
     ...
     template <class C_var>
     T_var(const C_var &cv) : ptr_(T::_duplicate(cv.in()) {
     }
     
     template <class C_var>
     T_var &operator = (const C_var &cv) {
 	if ((void *)this != (void *)cv) {
 	    CORBA::release(ptr_);
 	    ptr_ = T::_duplicate(cv.in());
 	}
 	return *this;
     }
     ...
 private:
     T_ptr	ptr_;
 };
 

Resolution:
Revised Text:
Actions taken:
June 2, 1998: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 1519: _var & _out types problems (01) (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: 1.  The spec insection 20.9.2 does not specifically address the form of
 T_out types for fixed length structured types.   So, should the T_out
 type be:
 
 typedef T &T_out;
 
 or should it follow the form of the T_out type for variable length
 structured types and define as a "class T_out"?  In this case, of course
 the copy contructor operator from T_var would not delete the pointer
 held by the T_var.
 
 Since the "class T_out" solution for fixed length types does not appear
 to have any advantages over the typedef, I recommend that the spec be
 modified to state that T_out types for fixed length structured types
 simply be a typedef of "T&".
 

Resolution: see below
Revised Text: Preceding the final paragraph of 1.9.2, add the following para: For fixed-length underlying types, no memory management issues arise; however, a compliant mapping must provide the following type definition in the scope of T: typedef T &T_out;
Actions taken:
June 10, 1998: received issue
May 13, 2002: closed issue

Discussion:


Issue 1520: Spec does not mention the existance of an Any_out class (cxx_revision)

Click
here for this issue's archive.
Nature: Enhancement
Severity:
Summary:
Summary: 2.  The spec does not explicitly mention the existence of an Any_out
 class.  I believe that this class is necessary, following the same
 pattern as the normal T_out class for variable length structured types.
 
 

Resolution: resolved and closed
Revised Text: Change 1.16.1 of formal/99-07-41 to read: 1.16.11 The Any_var and Any_out Classes Since Anys are returned via pointer as out and return parameters (see Table 1-3 on page 1-104), there exists an Any_var class similar to the T_var classes for object references. Any_var obeys the rules for T_var classes described in Section 1.9, "Mapping for Structured Types," on page 1-21, calling delete on its Any* when it goes out of scope or is otherwise destroyed. The full interface of the Any_var class is shown in Section 1.41.6, "Any_var Class," on page 1-154. An Any_out class is also available that is similar in form to the T_out class described in Section 1.9.2.
Actions taken:
June 10, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 1521: Spec is too verse in defining the T_var types for fixed length (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: 3.  The spec is too terse in defining the T_var types for fixed length
 structured types as having "the same semantics as T_var types for
 variable-length types."  This is not quite true, since the signatures
 for out and return values of these types are different, thus changing
 the semantics of the implicit and explicit (out() and _retn())
 conversion operations.  The spec should show the definition of the out()
 and _retn() operations for fixed length types as:
 
 T &T_var::out()
 {
     return ptr_;
 }
 
 T &T_var::_retn()
 {
     return ptr_;
 }
 

Resolution: closed/resolved
Revised Text: On page 1-25 of formal/99-07-41, change the paragraph beginning with "The T_var types are also produced for fixed-length structured types..." to the following: The T_var types are also produced for fixed-length structured types for reasons of consistency. These types have the same semantics as T_var types for variable-length types. This allows applications to be coded in terms of T_var types regardless of whether the underlying types are fixed- or variable-length. T_var types for fixed-length structured types have the following general form: class T_var { public: T_var() : m_ptr(0) {} T_var(T *t) : m_ptr(t) {} T_var(const T& t) : m_ptr(new T(t)) {} T_var(const T_var &t) : m_ptr(0) { if (t.m_ptr != 0) m_ptr = new T(*t.m_ptr); } ~T_var() { delete m_ptr; } T_var &operator=(T *t) { if (t != m_ptr) { delete m_ptr; m_ptr = t; } return *this; } T_var &operator=(const T& t) { if (&t != m_ptr) { T* old_m_ptr = m_ptr; m_ptr = new T(t); delete old_m_ptr; } return *this; } T_var &operator=(const T_var &t) { if (this != &t) { T* old_m_ptr = m_ptr; if (t.m_ptr != 0) m_ptr = new T(*t.m_ptr); else m_ptr = 0; delete old_m_ptr; } return *this; } T* operator->() { return m_ptr; } const T* operator->() const { return m_ptr; } const T& in() const { return *m_ptr; } T& inout() { return *m_ptr; } T& out() { if (m_ptr == 0) m_ptr = new T; return *m_ptr; } T _retn() { return *m_ptr; } private: T* m_ptr; };
Actions taken:
June 10, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 1534: Add _narrow() operation to each POA servant (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 1.  The C++ spec requires that all POA servant classes derive from
 PortableServer::ServantBase as a virtual base class.  For C++
 environments without RTTI, it is then impossible for the programmer to
 narrow a servant received from the POA via reference_to_servant() or
 id_to_servant() back to the programmer"s specific servant class.
 
 Proposal:  Add a _narrow() operation to each POA servant class in the
 same fashion that _narrow() operations are defined for exception
 classes:
 
 // IDL
 interface A { };
 
 // C++
 class POA_A : public virtual PortableServer::ServantBase {
 public:
     POA_A *_narrow(PortableServer::Servant);
 };
 
 The _narrow() operation will return a valid pointer if the servant isa
 POA_A, otherwise it returns 0.
 
 

Resolution: :ServantBase as a virtual base class. For C++
Revised Text:
Actions taken:
June 18, 1998: received issue

Discussion:
  Add a _narrow() operation to each POA servant class in the


Issue 1535: Do POA servant classes need to use virtual inheritance? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 2.  The spec is silent on whether POA servant classes need to use
 virtual inheritence when an IDL class inherits from the same base
 interface more than once:
 
 // IDL
 interface A { void op(); };
 interface B : A { };
 interface C : A { };
 value D : supports B, C { };
 
 Must POA_B & POA_C inherit virtually from POA_A or can defined
 independently with all of interface A"s operations?  This makes a big
 difference for values that support interfaces, since, for example, value
 D is defined by the C++ language mapping to inherit from both POA_B and
 POA_C.  So, does value D inherit one or two versions of A::op()?
 

Resolution: resolved
Revised Text: Add the following to the end of section 1.36.6 of formal/99-07-41: For interfaces which inherit from one or more base interfaces, the generated POA skeleton class uses virtual inheritance: // IDL interface A { ... }; interface B : A { ... }; interface C : A { ... }; interface D : B, C { ... }; // C++ class POA_A : public virtual PortableServer::ServantBase { ... }; class POA_B : public virtual POA_A { ... }; class POA_C : public virtual POA_A { ... }; class POA_D : public virtual POA_B, public virtual POA_A { ... }; 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: // C++ class A_impl: public virtual POA_A { ... }; class B_impl: public virtual POA_B, public virtual A_impl {}; For interfaces which inherit from an abstract interface, the POA skeleton class is also virtually derived directly from the abstract interface class, but with protected access: // IDL abstract interface A { ... }; interface B : A { ... }; // C++ class A { ... }; class POA_B : public virtual PortableServer::ServantBase, protected virtual A { ... }; The abstract interface is inherited with protected access to prevent accidental conversion of the POA skeleton pointer to an abstract interface reference, for ORBs which implement object references as pointers. This also allows implementation classes and valutypes to share an implementation of the abstract interface: // IDL valuetype V : supports A { ... }; // C++ class MyA : virtual A { ... }; class MyB : public virtual POA_B, protected virtual MyA { ... }; class MyV : public virtual V, public virtual MyA { ... };
Actions taken:
June 18, 1998: received issue
June 13, 2000: closded issue

Discussion:
 A { };


Issue 1538: Missing text describing fixed point constant mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: There is no text in the C++ language mapping that describes how to map a
 fixed point constant declaration.
 

Resolution:
Revised Text:
Actions taken:
June 23, 1998: received issue
February 23, 1999: closed issue

Discussion:
 received issue


Issue 1617: C++ mapping for strings (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: The C++ mapping requires that strings are to be mapped to char *.
 
 Unfortunately, with ANSI C++ compilers, this creates problems if
 string literals are involved.

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification
Revised Text: .
Actions taken:
June 30, 1998: received issue
March 19, 1999: closed issue

Discussion:
Close with no change. While the suggestion in the issue's archive would work, it would be too intrusive.


Issue 1626: C++ issue to coordinate with proposed resolution of issue 752 (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: In coordination with the proposed resolution to the ORB Portability RTF
 Issue #752, add the following operations to PortableServer::ServantBase
 in section 20.34.1:
 
 class ServantBase {
     ...
 public:
     ...
     virtual InterfaceDef_ptr _get_interface() throw(SystemException);
     virtual Boolean _is_a(const char * logical_type_id)
 throw(SystemException);
     virtual Boolean _non_existent() throw(SystemException);
     ...
 };
 
 and change the last paragraph of section 20.34.1 to:
 
 The default implementation of the _default_POA() function provided by
 ServantBase returns an object reference to the root POA of the default
 ORB in this process — the same as the return value of an invocation of
 ORB::resolve_initial_references("RootPOA") on the default ORB. Classes
 derived from ServantBase can override this definition to return the POA
 of their choice, if desired.
 
 and add the following text at the end of section 20.34.1:
 
 ServantBase provides default implementations of the _get_interface(),
 _is_a(), and _non_existent() standard object reference operations that
 can be overridden by the object implementation if the default behavior
 is not adequate.  These functions are called just like normal skeleton
 operations by the POA, so the programmer can use _this() and and the
 PortableServer::Current interface in the function bodies.
 
 The default implementation of the _get_interface() and _is_a() functions
 provided by ServantBase uses the interface associated with the skeleton
 class if it is static to determine its return value.  If the skeleton is
 dynamic (see 20.36) it uses the _primary_interface() function to
 determine its return value.
 
 The default implementation of the _non_existent() function simply
 returns false.
 

Resolution: :ServantBase
Revised Text:
Actions taken:
July 2, 1998: received issue
February 23, 1999: closed issue

Discussion:


Issue 1627: Problems with deactivate_object() (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: The POA does not properly define the behavior of POA operations
 for requests that are currently executing in an object that
 has been deactivated.
 

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
July 2, 1998: received issue
February 25, 1999: moved to cxx_revision
June 13, 2000: closed issue

Discussion:


Issue 1631: C++ Servants: Adding Reference counting (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The C++ mapping for the Portability Specification does not provide
 reference counting for servants.  This proposal adds reference
 counting to the C++ mapping to ease memory management of
 implementations.  It borrows from the C++ language mapping from the
 Objects by Value specification which does have reference counting for
 values.  Specifying the reference counting calls is important so that
 both the Adapter implementation and multi-threaded application code
 can cooperate to ensure that implementations are only deleted when no
 longer used by any thread.  Without specifying these calls, deadlocks
 are extremely easy to introduce into the system.
 

Resolution:
Revised Text:
Actions taken:
July 2, 1998: received issue

Discussion:


Issue 1655: Section 5.3.6.3 Value Factories (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The last paragraph of section 5.3.6.3 says the standard language mapping 
 rules are followed when determining these operation signatures.  Since
 one of the arguments/return values is a Native, this isn"t quite
 possible.
 
 

Resolution: Already resolved.
Revised Text:
Actions taken:
July 9, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 1656: C++ language mapping minor editorial revision (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: There are a few minor editorial mistakes in the C++ language
 mapping examples.  These are included in this single issue for
 brevity.
 

Resolution: Already resolved.
Revised Text:
Actions taken:
July 9, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 1657: Section 7.3.5 ValueBase editorial changes (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: The C++ language mapping for ValueBase is missing return
 values on _add_ref and _remove_ref.
 

Resolution: Fix the code.
Revised Text: On the top of page 20-77 of ptc/98-09-03, change the signatures of _add_ref and _remove_ref to be: virtual ValueBase* _add_ref() = 0; virtual void _remove_ref() = 0;
Actions taken:
July 9, 1998: received issue
March 19, 1999: closed issue

Discussion:
 received issue


Issue 1658: Parameter passing rules for ValueFactory (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: Since it is a native, the parameter passing rules for ValueFactory
 must be specified so the register/unregister/lookup operations
 can be mapped.
 
 
 

Resolution: Already resolved.
Revised Text:
Actions taken:
July 9, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 1659: Section 7.3.6: PortableServer::ValueRefCountBase (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: There is no mention of PortableServer::ValueRefCountBase after this
 page.  It is not clear why values that also implement interfaces
 do not use the same reference counting scheme as other values.
 
 
 

Resolution:
Revised Text:
Actions taken:
July 9, 1998: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 1686: resolve_initial_references missing from Orb interface (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: Are you looking at CORBA 2.2, document orbos/98-02-01?
 
 Section 20.31.4 covers ORB_init and friends. The POA is an ordinary IDL
 interface that just follows the ordinary C++ mapping rules, so it needs no
 special mention. The C++ server side is explained in 20.33 through 20.38.
 
 You are correct that resolve_initial_references is missing from the ORB
 interface. This was because it used to be covered in another section, and
 it appears to have been inadvertantly dropped by the editors at the OMG.
 Juergen, this should be logged as a cxx_revision issue. However,
 resolve_initial_references just follows the regular C++ mapping rules, so
 there"s really no harm in it being missing.
 

Resolution: Add the missing text.
Revised Text: In Section 20.33.1, page 20-130, of ptc/98-09-03, add the following to the ORB IDL: typedef string ObjectId; typedef sequence<ObjectId> ObjectIdList; Object resolve_initial_references(in ObjectId id) raises(InvalidName); ObjectIdList list_initial_services(); In section 20.33.2, pages 20-130 and 20-131, and page 20-169, add the following to the ORB class: typedef char* ObjectId; class ObjectIdList { ... }; Object_ptr resolve_initial_references(const char* id); ObjectIdList* list_initial_services();
Actions taken:
July 15, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 1700: void * functions for Any (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The mapping for Any currently requires:
 
 	Any(TypeCode_ptr tc, void *value, Boolean release = FALSE);
 	void replace(TypeCode_ptr tc, void *value, Boolean release = FALSE);
 	const void *value() const;
 
 The meaning of the void * parameters is never defined (and cannot ever
 be defined because it would have to mandate a particular binary layout).
 
 This means these three functions have completely undefined semantics. Even
 for basic types, such as CORBA::Long, I cannot assume that the void *
 will point directly at the long value, because the mapping implementation
 is free to make the pointer point at some other value internal to an Any.
 
 Proposal: Remove these three functions from the mapping. If vendors want
 	  to retain them for backward compatibility reasons, they can.
 	  However, functions with completely undefined semantics that are
 	  inherently non-portable have no place in a standard mapping.
 

Resolution: Leave the original text in place. Add a sentence saying that DynAny should be used instead.
Revised Text: Delete section 1.16.8, “Handling Untyped Values”. • Move the signature for the type() accessor to section 1.16.9. • Add the signature for the type modifier to section 1.16.9 (because it is missing currently from 1.16.8). • Update the mapping for Any in section 1.41.5: remove the constructor from void *, and the replace() and value() member functions.
Actions taken:
July 20, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 1735: Servant management rules (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Here is a list of all the POA-related operations that deal with the Servant
 type, and how I believe they need to act with respect to reference
 counting. Because there aren"t that many operations in this list, I believe
 that by spelling them out in detail rather than trying to capture their
 behavior in general rules accomplishes two things:
 
 1) We make it crystal clear to POA implementors and application developers
 how each operation handles reference counting for the Servants it deals
 with, and how the POA interacts with those servants.
 
 2) We make it clear to future maintainers of the C++ mapping for the
 PortableServer module that any new operations that deal with servants must
 have their servant reference counting semantics explicitly specified.
 
 Again, because there are so few operations to cover, explicitly specifying
 rules for each one is simple and precise.
 
 
 

Resolution:
Revised Text:
Actions taken:
July 25, 1998: received issue
August 5, 1998: closed issue

Discussion:


Issue 1747: from_string issue (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: The latest C++ mapping (document orbos/98-05-08) defines the
 Any::from_string type as
 
 struct from_string {
     from_string(char* s, ULong b, Boolean nocopy = FALSE) : val(s),
 bound(b) {}
     ...
 };
 
 In ANSI C++, this disallows the following code:
 
 any <<= Any::from_string("string literal");
 
 This is because string literals in ANSI C++ are const char[], not char[].
 Therefore, from_string should have an additional constructor to allow
 insertion of a const char* as well.
 

Resolution: Close as duplicate of 2453.
Revised Text:
Actions taken:
July 28, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 1776: New C++ issue about T_out classes (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 
 In 20.9.2, the T_out class has a copy constructor and assignment
 operator that take non-const references to a T_out argument.  These
 should be changed to const references instead because the T_out class
 still works correctly with the change, and many compilers issue errors
 or warnings about non-const references arguments bound to temporary
 values.
 

Resolution: fixed, issue closed
Revised Text: On page 20-33 of ptc/98-09-03, change the T_out copy constructor and assignment operator as follows: T_out(const T_out& p) : ptr_(p.ptr_) {} T_out& operator=(const T_out& p) { ptr_ = p.ptr_; return *this; } return *this; }
Actions taken:
August 5, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 1777: DSI C++ issue (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Section 20.36.1, page 20-118 of orbos/98-07-12 says:
 
 "Similarly, data allocated by the DIR and handed to the ORB (the NVList
 parameters, the result value, and exception values) are freed by the ORB
 rather
 than by the DIR."
 
 However, the signatures for the set_result() and set_exception() functions of
 ServerRequest take arguments of type const Any&. How can the ORB adopt the
 result and exception data from a const Any? Unless I am missing something,
 either these signatures have to be changed to Any&, or the quoted sentence has
 to change to remove the text "the result value, and exception values".
 
 

Resolution: Change the text as suggested.
Revised Text: Change the last sentence of 20.38.1, page 20-152 of ptc/98-09-03, to: Similarly, data allocated by the DIR and handed to the ORB (the NVList parameters) are freed by the ORB rather than by the DIR.
Actions taken:
August 5, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 1783: Comparison operators for Fixed (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: The fixed mapping in 98-07-12 shows:
 
 	Fixed operator > (const Fixed &val1, const Fixed& val2);
 	Fixed operator < (const Fixed &val1, const Fixed& val2);
 	Fixed operator >= (const Fixed &val1, const Fixed& val2);
 	Fixed operator <= (const Fixed &val1, const Fixed& val2);
 	Fixed operator != (const Fixed &val1, const Fixed& val2);
 	Fixed operator == (const Fixed &val1, const Fixed& val2);
 
 I"m surprised at the return type -- shouldn"t that be bool for ANSI
 compilers and int for non-ANSI compilers?
 

Resolution: Already resolved.
Revised Text:
Actions taken:
August 7, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 1785: Passing Fixed to operations (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: 	// IDL
 	typedef fixed<4,2> F;
 
 	interface foo {
 		void op(in F param);
 	};
 
 What should happen if at run time, I do the following?
 
 	F myf = "12345.678D";
 
 	foo_var fv = ...;
 	fv->op(myf);		// ???
 
 I think the operation should raise BAD_PARAM, because silent truncation
 is too dangerous. Note that the operation cannot send a fixed<8,3> because
 the operation expects a fixed<4,2> and will get a marshalling error if
 what arrives over the wire does not match the IDL definition.
 

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
August 7, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 1794: _ptr_type and _var_type typedefs (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: We recently added _ptr_type and _var_type typedefs into interface classes
 to make writing templates for interface types easier. We should add the
 same typedefs for valuetype classes.
 
 

Resolution: Add the missing typedefs
Revised Text: Add to 4.19: To facilitate template-based programming, typedefs for the _ptr, _out, and _var types are provided in the valuetype class. The typedef for _ptr is named _ptr_type, the typedef for _out is named _out_type, and the typedef for _var is named _var_type. Add to the example as part of 4.19.1: typedef ... Val_ptr; class Val_out; class Val_var; class Val : public virtual ValueBase { public: ... typedef Val_ptr _ptr_type; typedef Val_var _var_type; typedef Val_out _out_type;
Actions taken:
August 11, 1998: received issue
January 11, 2012: closed issue

Discussion:


Issue 1799: struct containing Fixed type (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Section 20.9, page 20-28 of orbos/98-07-12 describes what types are
 considered variable-length. Since the new Fixed class has non-trivial
 constructors, it should also be a considered a variable-length type. Note
 that any fixed-length struct containing one cannot be statically initialized.
 

Resolution:
Revised Text:
Actions taken:
August 11, 1998: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 1898: Fixed-point initialization (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The Fixed mapping requires throwing DATA_CONVERSION if a value has more
 than 31 integral digits:
 
 	Fixed f = 1E32;		// DATA_CONVERSION
 
 This raises the question of how to deal with Fixed types in environments
 without C++ exceptions. Presumably, we need to add a CORBA::Environment
 parameter everywhere. Unfortunately, that isn"t possible with the overloaded
 operators that are currently defined.
 
 

Resolution:
Revised Text:
Actions taken:
August 31, 1998: received issue

Discussion:
:Environment


Issue 1899: Rounding and truncation of Fixed (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: What happens if I do:
 
 	Fixed f = "999999.999";
 	Fixed f2;
 
 	f2 = f.round(3, 1);		// ???
 	f2 = f.truncate(3, 1);		// ???
 
 Should these throw DATA_CONVERSION? I think so -- if we agree on this,
 the spec should state it.
 
 

Resolution:
Revised Text:
Actions taken:
August 31, 1998: received issue

Discussion:


Issue 1923: Is SystemException supposed to be concrete? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The CORBA 2.2 C++ binding has the SystemException class defined as a
 concrete class, because it redefines _raise() as a non-pure virtual.
 
 This seems to be a bad idea to me.  It would be better to leave _raise()
 as a pure virtual so that SystemException cannot be instantiated.  This
 prevents accidental programming errors in catching SystemExceptions by
 value, which slices off the real exception type.
 
 

Resolution: Add pure virtual _raise functions to CORBA::SystemException and CORBA::UserException.
Revised Text: On page 20-102 of ptc/98-09-03, add a pure virtual _raise function to UserException. Do the same for SystemException on pages 20-102 and 20-103. Do the same for SystemException on page 20-162 and for UserException on page 20-163.
Actions taken:
September 2, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 1937: Signature of _narrow in exceptions (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The mapping shows the signature for the _narrow static member
 functions in exceptions as
 
 	static SystemException * _narrow(Exception *);
 
 I think we should change this to 
 
 	static SystemException * _narrow(const Exception *);
 
 Otherwise, I cannot catch an exception as const and then narrow it
 without a cast.
 
 

Resolution:
Revised Text:
Actions taken:
September 7, 1998: received issue
February 22, 1999: closed issue

Discussion:


Issue 1946: sequence allocbuf parameter != 0 (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Sequence allocbuf functions should be specified such that passing zero for
 their arguments is illegal. Allocating a sequence buffer of zero elements
 is rather pointless because nothing useful can be done with such a buffer.
 The result of passing zero to allocbuf should be implementation-defined,
 since throwing an exception is not a good way to handle programming logic
 errors (similar to how indexing past the end of a sequence is a logic error
 for which an exception is pretty useless).
 

Resolution: Close no change. Discussion of this issue determined that a zero parameter to allocbuf is legal and
Revised Text:
Actions taken:
September 13, 1998: received issue
June 13, 2000: closed issue

Discussion:
Close no change. Discussion of this issue determined that a zero parameter to allocbuf is legal and useful.


Issue 1947: sequence max < length (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: What happens when you pass a maximum argument that is less than the length
 argument to the "T* data" constructor of an unbounded sequence? Should the
 length argument be treated as equal to the max argument, or should an
 implementation-defined error (such as an assert) be allowed?
 
 What happens if you pass a null pointer for the buffer argument to the "T*
 data" constructor of a sequence? Should the constructor create the sequence
 as if it was created with the default constructor, or should an
 implementation-defined error (such as an assert) be allowed? Should a null
 pointer argument be allowed if the maximum and length arguments are zero?
 

Resolution:
Revised Text:
Actions taken:
September 13, 1998: received issue

Discussion:


Issue 1971: Extraction of strings from an Any (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: What happens if I write
 
 	CORBA::Any a = ...;
 	const char *p;
 
 	a >>= p;
 
 and the type code in the Any indicates a *bounded* string? Does the extraction
 succeed or fail? The mapping doesn"t say.
 
 

Resolution:
Revised Text:
Actions taken:
September 17, 1998: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 1983: Extraction of Fixed from Any (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The mapping right now offers Any::to_fixed to get a Fixed value out of an Any:
 
         to_fixed(Fixed &f, UShort d, UShort s);
 
 The spec doesn"t state what should happen if the digits and scale do
 not match what is in the type code. I believe extraction should fail in
 this case.
 

Resolution:
Revised Text:
Actions taken:
September 22, 1998: receive dissue

Discussion:
deferred in June 2011 to the next RTF


Issue 1984: Generic extraction of Fixed (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 
 The C++ mapping does not permit extraction of a Fixed from an Any
 in a generic way -- I must always specify matching digits and scale in
 order to call Any::to_fixed(). This is inconvenient if an application
 wants to deal with Fixed values generically (because Fixed is a generic
 type in C++ anyway).
 
 Proposal:
 
 	Add an overloaded >>= operator for extraction of Fixed from an Any. 
 	The operator sets the Fixed value to whatever scale and digits
 	are present in the type code.
 
 							Cheers,
 
 								Michi.
 
 
 

Resolution:
Revised Text:
Actions taken:
September 22, 1998: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 2002: The C++ mapping for valuetype _narrow should not _add_ref (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The C++ mapping for valuetype includes a typesafe _narrow generated
 for all values.  The specification states that the caller
 of _narrow must invoke _remove_ref once on the returned value
 from _narrow (just like object reference _narrow).
 f
 

Resolution: Already resolved.
Revised Text:
Actions taken:
September 27, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 2003: Tie classes (cxx_revision)

Click
here for this issue's archive.
Nature: Enhancement
Severity: Minor
Summary:
Summary: It would be nice to have a trait in the Tie classes of the class that the requests are being forwarded to.  Something like this:
 
 template <class T>
 class POA_Foo_tie : public POA_Foo
 {
 public: 
  // ....
 
  typedef T tie_object_type;
  
 };
 

Resolution:
Revised Text:
Actions taken:
September 28, 1998: received issue
September 30, 1998: closed, no action

Discussion:


Issue 2029: _primary_interface (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  From the C++ spec (CORBA2_3-c++.pdf) pg: 20-132
 
 For static skeletons, the default implementation of the _get_interface
 and _is_a functions provided by ServantBase use the interface associated
 with the skeleton class to determine their respective return values. For
 dynamic skeletons (see Section 20.37), these functions use the
 _primary_interface function to determine their return values.
 
 Does this mean that a dynamic implementation needs the IFR?
 If not, then how can _is_a be implemented for sub-types?
 
 I note that the java mapping includes the method _all_interfaces in Servant
 for precisely this reason...
 

Resolution: Already resolved.
Revised Text:
Actions taken:
October 2, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 2032: Typedef for ties? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: We currently have the _ptr_type and _var_type definitions for interface
 classes. These are useful for template functions that need to deal with
 the proxy type as well as the _ptr and/or _var references.
 
 In a similar vein, we could add a typedef to the tie template for the
 tied object class:
 
 	template<class T>
 	class POA_A_tie : public POA_A {
 	public:
 		typedef T _tied_object_type;	// <=== New
 		//
 	};
 

Resolution:
Revised Text:
Actions taken:
October 5, 1998: received issue
October 5, 1998: closed issue

Discussion:


Issue 2035: mapping IDL Unicode escapes to C++ (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The question has arisen how the new Unicode escapes that were
 introduced in the Java to IDL mapping should be mapped to C++.
 There"s nothing about this in the C++ mapping chapter.
 

Resolution:
Revised Text:
Actions taken:
October 5, 1998: received issue
October 6, 1998: moved from core to c++ revision

Discussion:


Issue 2097: 98-09-03, exception inconsistency (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: In 98-09-03, SystemException has a pure virtual _raise() member
 (Section 20.18). That member is not shown in Section 20.40.8.
 
 Also, I think UserException also should have the pure virtual _raise()
 member, but neither the text in Section 20.18 nor the summary in
 Section 20.40.9 shows it.
 

Resolution: Close as duplicate of 1923.
Revised Text:
Actions taken:
October 19, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 2118: Any missing LongLong operators, etc? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: In the latest spec (98-09-03) the Any class appears to be missing
   insertion extraction operators for LongLong, ULongLong, etc.
 
 

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
October 22, 1998: received issue
June 13, 2000: closed issue

Discussion:


Issue 2207: Need more info for custom marshalled value in C++ (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The current C++ chapter for custom marshalled values on p. 20-94 lacks
 information about how one implements a custom value.
 The "Value Type Semantics" chapter in "ptc/98-10-06, 15 Oct. 98[REVIEW]"
 p. 5-11 says,
     " The implementer of a custom value type shall provide an
     implementation of the CustomMarshaller operations. The manner
     in which this [sic] done shall be specified for each language mapping..."
 

Resolution:
Revised Text:
Actions taken:
November 12, 1998: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 2215: Object reference members, _var, and widening (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:    I recently encountered an issue regarding the assignment of
 Object_vars (shorthand for any object reference _var) to object
 reference members. While the spec explicitly forbids implicit widening
 when assigning Object_vars, it does not explicitly forbid it when
 assigning object reference members.

Resolution: Clarify the text
Revised Text: Change the first sentence of the para in the middle of page 20-16 of ptc/98-09-03 from: Implicit widening from a B_var to A_var or Object_var need not be supported. to: Implicit widening from a B_var to A_var or Object_var is not supported. Add the following sentence at the end of the same paragraph: The same rules apply for object reference types that are nested in a complex type, such as a structure or sequence.
Actions taken:
November 16, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 2222: Is public _ptr member mandatory? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: In a number of places in the sample code for the C++ binding, the symbol
 _ptr is used as a member variable in _var types. In all of these the
 actual member is shown as private, so it is clear that actual
 implementations could use something else.
 
 The one exception to this is in section 20.10 on the Mapping for Struct
 Types. This discusses (without sample code) the mapping for string and
 object reference members of structs.

Resolution:
Revised Text:
Actions taken:
November 19, 1998: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 2226: Errors in example code for boxed struct (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: On page 82 in 98-09-03 (Nov 6 1998), the sample code for a boxed
 struct is using the type "BoxedS" where "S" should be used.
 Specifically, the _value() and _boxed_XXX() functions.
 

Resolution: Modify the sample code as indicated.
Revised Text: On page 20-82 of ptc/98-09-03 change the _value, boxed_in, _boxed_inout, and _boxed_out functions to: const S& _value() const; S& _value(); void _value(const S& val); const S& _boxed_in() const; S& _boxed_inout(); S*& _boxed_out();
Actions taken:
November 20, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 2231: _raise() should be const (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
Summary: The CORBA::Exception::_raise() virtual member function should have the
 const qualifier.  Since it effectively throws a copy of the exception,
 there isn"t any reason why you shouldn"t be able to call it on a const
 Exception.
 

Resolution: Make _raise a const member function.
Revised Text: In ptc/98-09-03, pages 20-100 through 20-103 and 20-162 through 20-163, make _raise a const member function for classes Exception, SystemException, UserException, and UnknownUserException. Also note that this overlaps with the modifications for resolution to 1923.
Actions taken:
December 1, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 2234: String sequence and allocbuff (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The allocbuf function allocates a vector of T elements that can be
 passed to the T
 *data constructor and to the replace() member function. The length of
 the vector
 is given by the nelems function argument. The allocbuf function
 initializes each
 element using its default constructor, except for strings and wide
 strings, which are
 initialized to null pointers, and object references, which are
 initialized to suitably-typed
 nil object references. A null pointer is returned if allocbuf for some
 reason
 cannot allocate the requested vector.
 
 Since in the latest mapping the elements of string sequences are now
 initialized as empty strings, wouldn"t it be more logical if allocbuf
 would also initialize the elements of the returned string vector with
 empty strings instead of null pointers?
 

Resolution: closed
Revised Text: Change the specification of allocbuf to initialize each element in buffers of strings to point to an empty string. Change the specification of allocbuf to initialize each element in buffers of wide strings to point to an empty wide string. Revised Text: Change the second-to-last sentence at the bottom of page 20-52 of ptc/98-09-03 to: The allocbuf function initializes each element using its default constructor, except for strings and wide strings, which are initialized to empty strings pointers, and object references, which are initialized to suitably-typed nil object references.
Actions taken:
December 1, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 2253: portable includes (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: We all know that the names of the C++ #include files generated from IDL are
 not standardized, and are thus the one remaining major source portability
 issue. One way to fix this would be to agree on some standard filenames,
 but we"ve tried this before and have never succeeded.
 
 Just thinking out loud here, but another way to fix it would be to agree on
 some standard macro names that applications could use to portably include
 the appropriate files. For example, define one macro for a client-side
 include and one macro for a server-side include, both taking the basename
 of the IDL file as an argument:
 
 #ifndef CORBA_CXX_CLIENT_INCLUDE
 #define CORBA_CXX_CLIENT_INCLUDE(base) <base ## Client.hh>
 #endif
 
 #ifndef CORBA_CXX_SERVER_INCLUDE
 #define CORBA_CXX_SERVER_INCLUDE(base) <base ## Server.hh>
 #endif
 
 Obviously, the exact definition of the macro would depend on the names of
 the generated files.
 
 I believe these could then be used portably in the client and server source
 code like this:
 
 #include CORBA_CXX_CLIENT_INCLUDE(file)
 
 With this approach, nobody has to change the names of the files they
 currently generate.
 

Resolution:
Revised Text:
Actions taken:
December 14, 1998: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 2285: Value Box Mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: This may be a naive question, but it seems like the C++ mapping
 for value boxes is incomplete.  As far as I can tell, the specification
 defines the mapping for the following types:
 
   basic types, enum, objref, string, wstring, struct, union, sequence, array, fixed, any
 
 But what about the types that have not been mentioned?
 
   value, value box, TypeCode, Principal, native, except
 
 If these types aren"t allowed, does the specification say that somewhere?
 

Resolution:
Revised Text:
Actions taken:
December 23, 1998: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 2286: string allocation functions -- description ambiguous (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: the text for string_alloc et al. says:
 
 	The string_alloc function dynamically allocates a string,
 	or returns a null pointer if it cannot perform the allocation.
 
 	[ ... ]
 
 	The string_alloc, string_dup, and string_free functions may not
 	throw CORBA exceptions.
 
 I think the second sentence is a little misleading. What is meant is that
 these functions cannot throw *any* exceptions at, not that they won"t throw
 CORBA excecptions but are allowed to throw others, such as bad_alloc.
 
 I suggest to change the second sentence to read:
 
 	The string_alloc, string_dup, and string_free functions may not
 	throw exceptions.
 
 

Resolution: Clarify the text.
Revised Text: On page 20-26 of ptc/98-09-03, change the sentence: The string_alloc, string_dup, and string_free functions may not throw CORBA exceptions. To read: The string_alloc, string_dup, and string_free functions may not throw exceptions.
Actions taken:
December 24, 1998: received issue
December 24, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 2288: C++ spec uses reserved names in global namespace (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The C++ language mapping generates typecode names for global IDL type
 definitions that start with an underscore.  The C++ standard reserves
 global symbols that start with an underscore for the compiler
 implementation.  We need to resolve this conflict.
 

Resolution: Close with no change
Revised Text: : Close with no change. We don't have evidence that the _tc_ mapping causes problems for existing implementations. We would prefer not to make an incompatible change for something that is not definitely known to cause a problem.
Actions taken:
December 29, 1998: received issue
March 19, 1999: closed issue

Discussion:


Issue 2306: Valuetypes as operation arguments (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The C++ mapping document (98-09-03, p. 108) states that "... the callee
 shall receive a copy of each valuetype argument passed to it even if the
 caller and callee are collocated in the same process."
 
 In the collocated case, should the ORB invoke _copy_value() to produce
 the copy?
 
 Since the user could implement _copy_value() to return a nil value, it
 seems unlikely that the ORB could rely on this mechanism.  However, a
 properly implemented _copy_value() would likely provide a significant
 speed improvement over marshalling and unmarshalling.
 
 

Resolution:
Revised Text:
Actions taken:
January 18, 1999: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 2309: Memory management of recursive value (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Section 20.21, "Argument Passing Considerations," says that for valuetypes:
      "The caller shall eventually invoked _remove_ref on the valuetype
 instance it receives back as either an inout, out, or return value."
 
 For memory management purposes, this is not sufficient in some cases.
 
 

Resolution:
Revised Text:
Actions taken:
January 20, 1999: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 2335: Extraction from Any by pointer (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: the mapping currently specifies that for char * and WChar *, the following
 extraction operators must be defined on type Any:
 
 	class Any {
 		Boolean operator>>=(const Any &, char * &);
 		Boolean operator>>=(const Any &, WChar * &);
 		// ...
 	};
 
 For user-defined complex types and other variable-length types, the mapping
 requires:
 
 	class Any {
 		Boolean operator>>=(const Any &, T * &);
 		// ...
 	};
 
 This means that a conforming ORB need not compile the following:
 
 	CORBA::Any a = ...;
 	const char * p;
 	a >>= p;		// No matching operator
 
 This is a Bad Thing (TM), in my opinion. The reason is that when I extract
 something by pointer, first, the Any retains ownership and, second,
 I must treat the pointed-to memory as read-only.
 

Resolution: fixed, issue closed
Revised Text: Change second extraction operator near the bottom of page 20-61 of ptc/98-09-03 (the one for extraction by pointer) to read: Boolean operator>>=(const Any&, T*&); // Deprecated Boolean operator>>=(const Any&, const T*&); Add a note or footnote to state that: The non-constant version of the operator will be deprecated in a future version of the mapping and should not be used. Change the para in the middle of page 20-62 that currently reads For non-primitive types, such as struct, union, sequence, exception, Any, and valuetype, extraction is done by pointer. For example, consider the following IDL struct: to the following: For non-primitive types, such as struct, union, sequence, exception, and Any, extraction is done by constant pointer (valuetypes are extracted by non-const pointer, however, because valuetype operations do not support const.) For example, consider the following IDL struct: Change the code examples that follows to read: // C++ Any a; // ... a is somehow given a value of type MyStruct ... const MyStruct * struct_ptr; if (a >>= struct_ptr) { // ... use the value ... } Overload the constructors for to_string and to_wstring on page 20-65 for const pointers (the public members need to be references to constant pointers) and mark the old constructors as deprecated: struct to_string { to_string(const char *&s, ULong b) : val(s), bound(b) {} const char *&val; ULong bound; // Deprecated: to_string(char *&s, ULong b) : val(s), bound(b) {} }; struct to_wstring { to_wstring(const WChar *&s, ULong b) : val(s), bound(b) {} const WChar *&val; ULong bound; // Deprecated: to_wstring(WChar *&s, ULong b) : val(s), bound(b) {} }; Add a note to state: The non-constant versions of the constructors will be removed in a future version of the mapping and should not be used. Change the code example for string extraction on page 20-66 to adjust it for extraction by constant pointer. const char * p = "bounded"; any <<= Any::from_string(p, 8); // ... if (any >>= Any::to_string(p, 8)) { // ...any contained a string<8>... }
Actions taken:
January 22, 1999: received issue
March 19, 1999: closed issue

Discussion:


Issue 2345: "Diamond of Death" in CosLifeCycleReference (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The following MIGHT be considered an issue for CosLifeCycle and/or
 CosReference.
 
 The inheritance of CosReference::Relationship and
 CosCompoundLifeCycle::Relationship by CosLifeCycleReference::Relationship
 creates a "Diamond of Death" inheritance structure, in which
 CosRelationships::Relationship is inherited by two distinct paths:
 
                    CosRelationships::Relationship
                          /               \
                         /                 \
  CosReference::Relationship            CosCompoundLifeCycle::Relationship
                         \                 /
                          \               /
                 CosLifeCycleReference::Relationship
 
 

Resolution:
Revised Text:
Actions taken:
January 26, 1999: received issue
January 27, 1999: closed issue

Discussion:
:Relationship is inherited by two distinct paths:


Issue 2346: Any inserters and extractors (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: the 1.4 version of the C++ mapping has an internal inconsistency. In
 sections 20.16.2 and 20.16.3, the inserters and extractors for built-in
 types that don"t require a from_* or to_* helper class are shown
 as non-member functions of type Any.
 
 However, section 20.39.5 shows the the inserters and extractors as
 member functions of type Any.
 
 Section 20.39.5 is wrong and needs be updated to reflect the signatures
 in 20.16.
 

Resolution: closed issue
Revised Text:
Actions taken:
January 27, 1999: received issue
March 19, 1999: closed isue

Discussion:


Issue 2350: boxed types for floating point values (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: In ptc/98-08-03 p.20-80:
 
 	For all the integer types, boolean, octet, char, wchar and
 	enumerated types, value box classes provide.
 
 1. The phrase "integer types" should presumably read "integer types except for
 fixed" in view of the separate mapping for fixed type on p. 20-85. It
 is true that "integer type" can mean signed_int or unsigned_int, in
 contexts such as Corba 2.3a grammar, but the phrase here seems
 potentially ambigous.
 
 2. The phrase should be extended to include floating point types
 (including float, double, and long double).
 

Resolution: Clarify the text.
Revised Text: Change the affected sentence to: For all the signed and unsigned integer types except for the fixed type, and for boolean, octet, char, wchar, float, double, long double, and enumerated types, and for typedefs of all of these, value box classes provide:
Actions taken:
January 28, 1999: received issue
March 19, 1999: closed issue

Discussion:


Issue 2351: CORBA2.3 C++ mapping for the TypeCode class (section 20.31.2) (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Issue:  The CORBA2.3 C++ mapping for the TypeCode class
 (section 20.31.2) has not been updated.
 
 Suggested Resolution:  Add get_compact_typecode() and valuetype/
 valuebox operations.  Also, remove the param_count and parameter
 methods which were deprecated in CORBA2.2 and eliminated in
 CORBA2.3.
 

Resolution: This issue has already been resolved.
Revised Text:
Actions taken:
January 28, 1999: received issue
March 19, 1999: closed issue

Discussion:


Issue 2354: CustomMarshal mapping type (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: ptc/98-09-03, p. 20-96: In "The C++ mappings for the IDL
 CORBA::CustomerMarshal..." change Customer to Custom.
 

Resolution: Fix the typo.
Revised Text: Change the first sentence on page 20-96 of ptc/98-09-03 to: The C++ mappings for the IDL CORBA::CustomerMarshal, CORBA::DataOutputStream, and CORBA::DataInputStream types follow normal C++ valuetype mapping rules.
Actions taken:
January 29, 1999: received issue
March 19, 1999: closed issue

Discussion:
 received issue


Issue 2355: ORB mapping re Policy (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 1. ORB pidl on 20-130 of ptc/98-09-03 is missing the create_policy
 pseudo-operation.
 
 2. Sometimes I think the traditional style of PIDL mapping used for the Java,
 C++, and draft Lisp mappings, wherein each PIDL pseudo-operation is
 explicitly listed in each mapping, is risky - insofar as version
 mismatches between the Core Pseudo-IDL and the pseudo-IDL used in the
 mapping document can and frequently do arise. 
 

Resolution: Add the missing operation.
Revised Text: To the ORB interface in 20.33.1, page 20-130, of ptc/98-09-03, add the following operation: Policy create_policy(in PolicyType type, in any val) raises(PolicyError); To the ORB class in 20.33.2, page 20-130, add the following member function: Policy_ptr create_policy(PolicyType type, const Any& val) throw(SystemException, PolicyError);
Actions taken:
January 29, 1999: received issue
March 19, 1999: closed issue

Discussion:


Issue 2357: Misleading text for DSI invoke() and _primary_interface() (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Section 20.38.3 of the CORBA 2.3 draft states:
 I believe that the intent of this paragraph is to forbid the user from
 calling invoke() and _primary_interface() directly, not to forbid the
 POA from calling _primary_interface() in circumstances other than
 processing a request.
 
 The paragraph should be reworded to say:
 
 "The invoke() and _primary_interface() methods will be called by the
 POA, and should never be explicitly called by the application."
 

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
January 29, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2375: Transfer of C++ codes (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity: Minor
Summary:
Summary: During my study of the specification CORBA 2.2, I tried to transfer C++ codes on pages 20-12, 20-13 and 20-11 to the C++ source, add some dummy declarations and definitions of such classes as Object and tried to compile it. I obtained error message from the definition of the constructor A_out::A_out(A_var& p) : ptr_(p.ptr_) ... due to unauthorized access to protected  member A_var::ptr_. This was no conceptual problem to introduce access function A_var::ptr() in similar manner like has been introduces function A_out::ptr() and correct the problem, another way is definition of some classes as friend ... . But my reliance to document containing such mistakes was lost. Please, can you pay more attention to testing and preparing of the concluding documents?
 

Resolution: Closed without change
Revised Text: Closed without change. The code compiles correctly; moreover, it is not intended to be a tutorial on C++ software development, nor is it meant as a normative implementation.
Actions taken:
February 2, 1999: received issue
February 5, 1999: moved from orb_revision to cxx_revision
March 19, 1999: closed issue

Discussion:


Issue 2376: Interface issue (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity: Minor
Summary:
Summary: The interface between application programmer and CORBA components (BOA, stubs, skeletons etc.) should be as simple as possible (but, naturally, not more simple). I am afraid, that introduction of the new classes to C++ mapping like A_out is not the best way to simplify their life to the creators of the final applications - the application programmers. It is naturally, when creator of the CORBA implementation use very advanced and sophisticated constructions of the programming language, but let he/she left application creators their invention to study application problems, not those advanced features of the programming environment. How many application programmers understand well such construction like "reference to pointer"?
 Naturally, if the new constructions would bring some new principal features to the problem, they may be accepted, but I am afraid, that the only reason of the A_out class is to ensure freeing of memory occupied by the old data of the corresponding variables. But the same service may be done by the first statement of the (generated) stub.
 

Resolution: Close no change. This change is too intrusive and would break too much existing code.
Revised Text: Close without change. The addition of the _out types at CORBA 2.2 already caused much churn for C++ developers, and changing things back now would just cause code to needlessly break again.
Actions taken:
February 2, 1999: received issue
February 5, 1999: moved from orb_revision to cxx_revision
March 19, 1999: closed issue

Discussion:


Issue 2441: tie doesn"t do ref counting (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: After all the recently past work getting servant reference counting, it
 just occurred to me that this doesn"t work with TIE. Or am I missing
 something?
 
 As things stand, to make it work it is necessary to derive a new class
 from both the instantiated tie template and RefCountServantBase. This
 then requires all the constructors to be redefined - ugh!
 

Resolution: See resolution for issue 4114, which addresses this issue as well.
Revised Text:
Actions taken:
February 5, 1999: received issue
February 5, 1999: changed from orb-revision to cxx_revision
May 13, 2002: closed issue

Discussion:


Issue 2443: C++ keyword mapping ambiguous (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The last para of section 20.1.2 says:
 
 	To avoid C++ compilation problems, every use in OMG IDL of a
 	C++ keyword 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++.
 
 This is ambiguous because it doesn"t make it clear what the names of types
 derived from that interface shold be.

Resolution: Clarify the text.
Revised Text: Change the para (page 20-13) that now reads: To avoid C++ compilation problems, every use in OMG IDL of a C++ keyword 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++. The complete list of C++ keywords from the 2 December 1996 Working Paper of the ANSI/ISO C++ standardization committees (X3J16, WG21) can be found in the "C++ Keywords" appendix. To read: To avoid C++ compilation problems, every use in OMG IDL of a C++ keyword 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 also rule applies to identifiers that are derived from IDL identifiers; for example, an IDL interface "try" generates the names "_cxx_try_var" and "_cxx_try_ptr", that is, the IDL compiler behaves as if the interface were name "_cxx_try" and then applies the normal mapping rules. The complete list of C++ keywords from the 2 December 1996 Working Paper of the ANSI/ISO C++ standardization committees (X3J16, WG21) can be found in the "C++ Keywords" appendix.
Actions taken:
February 8, 1999: received issue
March 19, 1999: closed issue

Discussion:


Issue 2445: add a _var type for each servant type (cxx_revision)

Click
here for this issue's archive.
Nature: Enhancement
Severity: Minor
Summary:
Summary: full_desc: The C++ mapping for CORBA 2.3 introduces reference
 counting on servants and provides the
 PortableServer::ServantBase_var class for automated
 reference counting. However, this class can not be
 used if a more specific type of the servant is needed.
 Proposal: add a _var type for each servant type, for
 example POA_FooBar_var.
 
 

Resolution: see below
Revised Text: See also the resolution for issue 4210; the two issues affect the same section of text. Add the following as the last sentence to the first para of section “ServantBase_var Class”: Class ServantBase_var is a type definition of the Servant_var template for type ServantBase: // C++ namespace PortableServer { class ServantBase { /* ... */ }; typedef Servant_var<ServantBase> ServantBase_var; } The definition of the Servant_var template is as follows: namespace PortableServer { template<typename Servant> class Servant_var { protected: void swap(Servant* lhs, Servant* rhs) { Servant *tmp = lhs; lhs = rhs; rhs = tmp; } public: Servant_var() : _ptr(0) {} Servant_var(Servant* p) : _ptr(p) {} Servant_var(const Servant_var& b) : _ptr(b._ptr) { if (_ptr != 0) _ptr->_add_ref(); } ~Servant_var() { if (_ptr != 0) { try { _ptr->_remove_ref(); } catch (...) { // swallow exceptions } } } Servant_var& operator=(Servant* p) { if (_ptr != p) { Servant_var<Servant> tmp = p; swap(_ptr, p); } return *this; } Servant_var& operator=(const Servant_var& b) { if (_ptr != b._ptr) { Servant_var<Servant> tmp = b; swap(_ptr, b._ptr); } return *this; } Servant* operator->() const { return _ptr; } Servant* in() const { return _ptr; } Servant*& inout() { return _ptr; } Servant*& out() { if (_ptr != 0) { Servant_var<Servant> tmp; swap(_ptr, tmp._ptr); } return _ptr; } Servant* _retn() { Servant* retval = _ptr; _ptr =0; return retval; } private: Servant* _ptr; }; typedef Servant_var<ServantBase> ServantBase_var; } Insert the following text immediately preceding the end of the Servant_var section: The Servant_var template can be used to write exception-safe and type-safe code for heap-allocated servants. For example: { Servant_var<Foo_impl> foo_servant = new Foo_impl; foo_servant->do_something(); // might throw... some_poa->activate_object_with_id(...); return foo_servant->this; }
Actions taken:
February 9, 1999: received issue
May 13, 2002: closed issue

Discussion:


Issue 2453: Any inserters for strings need to use const pointers (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The inserter helper functions for string and wstring on type Any should
 have const pointers as the constructor parameter, otherwise I can"t
 insert string literals with an ANSI C++ compiler.
 

Resolution: Make the suggested fixes.
Revised Text: Modify the from_string and from_wstring insertion helper types shown on page 20-64 and 20-159 of ptc/98-09-03 as follows: struct from_string { from_string(char* s, ULong b, Boolean n = FALSE) : val(s), bound(b), nocopy(n) {} from_string(const char* s, ULong b) : val(const_cast<char *>(s)), bound(b), nocopy(0) {} char *val; ULong bound; Boolean nocopy; }; struct from_wstring { from_wstring(WChar* s, ULong b, Boolean n = FALSE) : val(s), bound(b), nocopy(n) {} from_wstring(const WChar* s, ULong b) : val(const_cast<WChar *>(s)), bound(b), nocopy(0) {} WChar *val; ULong bound; Boolean nocopy; };
Actions taken:
February 16, 1999: received issue
March 19, 1999: closed issue

Discussion:


Issue 2463: Incorrect types for type-safe Any extraction (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The first bullet point at the bottom of page 20-61 is incorrect. It
 states that Boolean, Char, and Octet can be extracted using >>=. However,
 on page 20-66, the mapping requires a compile-time error for attempts
 to extract these types with >>=.
 
 Proposal:
 
 	Delete Boolean, Char, and Octet from teh list of types at
 	the bottom of page 20-61.
 
 

Resolution:
Revised Text:
Actions taken:
February 22, 1999: received issue
February 22, 1999: closed issue

Discussion:


Issue 2489: 20.17.9 Valuetype Inheritance (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: For an IDL valuetype derived from other valuetypes or that supports
 interface types, several C++ inheritance scenarios are possible:
 ...
 * Interface classes supported by the IDL valuetype are not inherited. Instead,
 the operations on the interface (and base interfaces, if any) are mapped to
 pure virtual functions in the generated C++ base value class. In addition to
 this abstract base value class and the OBV_ class, the IDL compiler generates
 a POA skeleton for this value type; the name of this skeleton is formed by
 prepending the string "POA_" to the fully-scoped name of the valuetype. The
 base value class and the POA skeleton of the interface type are public virtual
 base classes of this skeleton.
 
 
 Consider this example:
 
 // IDL
 interface I {};
 abstract valuetype A supports I {};
 valuetype B : A {};
 
 Is a POA skeleton generated for A?  Is one generated for B?
 

Resolution:
Revised Text:
Actions taken:
February 25, 1999: received issue

Discussion:


Issue 2496: generate concrete classes and factories for valuetypes without initializer (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Suggestion: generate concrete classes and factories
 for valuetypes that do not have any initializers. If a
 value type does not have any initializers, it should
 be safe to use the default constructor for all members.
 
 This would reduce the size of the code that needs
 to be written by the application programmer.
 
 Similarly, concrete factories could be generated for
 value boxes

Resolution: resolved/closed
Revised Text: 1.Change the semantics of the generated OBV_ classes for valuetypes that have no operations so that the OBV_ class can be used directly by the programmer. This allows the OBV_ class for valuetypes like this: valuetype Pair { string name; any value; }; to be used in an application without creating an extra redundant derived class that adds no behavior. Change the paragraph in 1.17.2 that reads: (fixing an editorial error as well) For the same reasons, a C++ OBV_ class defines a protected default constructor, a protected constructor that takes an initializer for each valuetype data member, and a protected default constructor. The parameters of the constructor that takes an initializer for each member appear in the same order as the data members appear, top to bottom, in the IDL valuetype definition, regardless of whether they are public or private. All parameters for the member initializer constructor follow the C++ mapping parameter passing rules for in arguments of their respective types. to: For the same reasons, a C++ OBV_ class for a valuetype that has operations defines a protected default constructor, a protected constructor that takes an initializer for each valuetype data member, and a protected default destructor. The parameters of the constructor that takes an initializer for each member appear in the same order as the data members appear, top to bottom, in the IDL valuetype definition, regardless of whether they are public or private. All parameters for the member initializer constructor follow the C++ mapping parameter passing rules for in arguments of their respective types. For valuetypes that have no operations other than factory initializers, the same constructors and destructors are generated, but with public access so that they can be directly instantiated by application code. 2.Change the semantics of the generated type-specific ValueFactory class for valuetypes that have no operations or factory initializers to be concrete, so an application can use it directly rather than having to derive from it. Change the last paragraph of 1.17.10.3 from: For valuetypes that have no initializers, there are no type-specific abstract factory classes, but applications must still supply concrete factory classes. These classes, which are derived directly from ValueFactoryBase, need not supply _downcast functions, and only need to override the create_for_unmarshal function. to: For valuetypes that have no operations or initializers, a concrete type-specific factory class is generated whose implementation of the create_for_unmarshal function simply constructs an instance of the OBV_ class for the valuetype using new and the default constructor. For valuetypes that have operations, but no initializers, there are no type-specific abstract factory classes, but applications must still supply concrete factory classes. These classes, which are derived directly from ValueFactoryBase, need not supply _downcast functions, and only need to override the create_for_unmarshal function."
Actions taken:
March 1, 1999: received issue
March 16, 2000: closed issue

Discussion:


Issue 2497: Value boxes and sensible value issue (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  Value Boxes inherit from CORBA::ValueBase and
 must therefore implement get_value_def(), but
 cannot return a sensible value.
 

Resolution:
Revised Text:
Actions taken:
March 1, 1999: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 2498: narrow abstract interface class to concrete object? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Should it be possible to narrow an abstract interface
 class to a concrete Object, or to downcast it to a
 Valuetype?
 

Resolution: closed/resolved
Revised Text: In section 1.18.1 of formal/99-07-41, add the following operations to AbstractBase: class AbstractBase { ... public: ... Object_ptr _to_object(); ValueBase * _to_value(); ... }; and the following paragraph: If the concrete type of an abstract interface instance is a normal object reference, the _to_object() function returns a reference to that object, otherwise it returns a nil reference. If the concrete type is a valuetype, _to_value() returns a pointer to that valuetype, otherwise it returns a null pointer. The caller of _to_object() or _to_value() is responsible for properly releasing the returned reference or pointer.
Actions taken:
March 1, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2499: Add AbstractBase base type to IDL language? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Does it make sense to add the AbstractBase base
 type to the IDL language, so that operations could
 receive an AbstractBase parameter?
 

Resolution: close with no change
Revised Text:
Actions taken:
March 1, 1999: received issue
June 13, 2000: closed issue

Discussion:
Close no change. AbstractBase is already defined in IDL as a native type. Some disagree with this definition, and it may change
in the future, but nevertheless it is workable for now. 


Issue 2523: Valuetype argument passing (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  The passing of valuetypes as parameter to operations needs more
 consideration. Section 20.22 of ptc/98-09-03 (98/11/06) specifies
 that the callee should receive a deep-copy of each valuetype to
 preserve location transparently.
 
  Now, does this apply only to operations of interfaces, or also to
 valuetype operations? With the current phrasing, this applies just
 the same (meaning that valuetype operations also receive a deep-
 copy). And then there are abstract interfaces, which may incarnate
 a remote interface or a local valuetype.
 
 

Resolution: Close no change. The specification is already clear about valuetype argument passing semantics.
Revised Text:
Actions taken:
March 9, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2525: string sequences and empty strings (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: For string sequences, new string elements, that are created when the
 sequence length is increased, should be initialized to the empty string.
 
 I therefore raise this herewith as an official issue.
 
 I also don"t think it makes sense to vote on issue 2234 before we
 decided on the issue above. As I already pointed out, I raised issue
 2234 in the believe that the spec already says that new string sequence
 elements are initialized as empty string. But this assumption was wrong.
 

Resolution: closed and fixed
Revised Text: Modify the specification to require string elements and wide string elements of sequences to be initialized to the empty string when the sequence length is increased. Revised Text: On page 20-48 of ptc/98-09-03, add the following paragraph after the second paragraph: The length() functions can be used to access and modify the length of the sequence. Increasing the length of a sequence adds new elements at the tail. The newly-added elements behave as if they are default-constructed when the sequence length is increased. However, a sequence implementation may delay actual default construction until a newly-added element is first accessed. For sequences of strings and wide strings, default element construction requires initialization of each element to the empty string or wide string. For sequences of object references, default element construction requires initialization of each element to a suitably-typed nil reference. For sequences of valuetypes, default element construction requires initialization of each element to a null pointer. The elements of sequences of other complex types, such as structs and sequences, are initialized by their default constructors. Union sequences elements do not have any application-visible initialization; in particular, a default-constructed union element is not safe for marshaling or access. Sequence elements of a basic type, such as ULong, have undefined default values.
Actions taken:
March 10, 1999: received issue
March 19, 1999: closed issue

Discussion:


Issue 2530: Sequences and get_buffer() (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  This is a new issue for the C++ RTF.
 
  The mapping for sequences mandates a get_buffer() accessor for read/write
 access to the members of the sequence. It is mentioned that an implemen-
 tation is not required to store sequence elements in continuous memory
 for efficiency reasons, but may choose to do so only when get_buffer()
 is called.
 
  However, this introduces coherency problems if sequence elements are
 accessed and modified using both get_buffer() and operator[].
 
  get_buffer() is not possible for recursive sequences anyway.
 

Resolution: Close no change. The submitter of the issue misread the specification.
Revised Text:
Actions taken:
March 12, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2560: Factories for StringValue and WStringValue (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  The C++ mapping for Objects by Value requires factories for marshalling
 valuetypes. Therefore, it needs to specify default factories for the
 standard StringValue and WStringValue types.
 

Resolution: Close no change. Valueboxes do not have factories.
Revised Text:
Actions taken:
March 30, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2561: Valuetypes and arbitrary graphs (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary:  Valuetypes can be used to form arbitrary, potentially circular graphs.
 This means that reference counts may never drop to zero and that more
 advanced garbage collection is required, which does not come natural to
 C++.
 
  An ORB may keep track of circularity by traversing a graph and can detect
 if the last outside reference is lost. However, the overhead is significant,
 and the solution would be incomplete, as users need not use "proper" refe-
 rence counting on graph nodes by ignoring both OBV_* classes and default
 reference counting.
 
  Possible solution: restrict CORBA::DefaultValueRefCountBase to
 non-circular graphs. Users can decide much better when a graph is safe
 to be cleaned up.
 

Resolution: Close as duplicate of 2309.
Revised Text:
Actions taken:
March 30, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2564: Valuetypes and _out classes in C++ mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: I"m trying to work out how valuetypes interact with My question is what should the two reference counts be, and why?
 >From my understanding, myVal"s reference count should be 1, and myPtr"s
 reference count should be 0.
 
 Is this correct? Perhaps an example _out type for valuetypes should be
 included in the spec to clear this up for future reference.
 

Resolution: Close no change. The submitter of the issue misunderstood _var semantics.
Revised Text:
Actions taken:
March 31, 1999: received issue
March 31, 1999: moved from core to cxx_revision
June 13, 2000: closed issue

Discussion:


Issue 2614: Setting the TypeCode of an Any without setting a value (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: Consider the following IDL:
 
 ----------------------------------------------------------------------
 // IDL
 typedef long MyArray[1000000];
 
 interface I
 {
     void set_array(in MyArray array);
 };
 ----------------------------------------------------------------------
 
 Now let"s assume that I want to implement this using the DSI:
 
 ----------------------------------------------------------------------
 // C++
 void
 I_impl::invoke(ServerRequest_ptr request) throw()
 {
     String_var name = request -> op_name();
 
     if(strcmp(name, "set_array") == 0)
     {
 	NVList_ptr list;
 	orb -> create_list(0, list);
 
 	Any* any = list -> add(ARG_IN) -> value();
 
         XXX
 
 	request -> params(list);
 
 	MyArray_forany arg;
 	*any >>= arg;
 
 	... // Do something with arg;
 
 	return;
     }
     else
     {
         NVList_ptr list;
 	orb -> create_list(0, list);
 	request -> params(list);
 
 	Any* any = new Any;
 	*any <<= new BAD_OPERATION();
 	request -> exception(any);
     }
 }
 ----------------------------------------------------------------------
 
 At the line I marked with XXX, I have to set the TypeCode of the
 Any.

Resolution:
Revised Text:
Actions taken:
April 20, 1999: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 2619: operator>> for String_var (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The C++ mapping says:
 
 A compliant mapping implementation shall provide overloaded operator<<
 (insertion) and operator>> (extraction) operators for using String_var
 and
 String_out directly with C++ iostreams.
 
 >From this definition it"s no clear whether operator>> allocates memory
 or not. That is, is the following code correct?
 
 CORBA::String_var str;
 cin >> str;
 

Resolution: closed/resolved
Revised Text: Add the following to the last sentence in Section 1.7 of formal/99-07-41: The operator>> extraction operator has the same semantics as the underlying standard C++ operator>> for extracting strings from an input stream (extracting until whitespace or end of file). Space to store the extracted characters are allocated by calling string_alloc, and the previous contents of the String_var are released by calling string_free. Add the following to the last sentence in Section 1.8: The operator>> extraction operator has the same semantics as the underlying standard C++ operator>> for extracting wide strings from an input stream (extracting until whitespace or end of file). Space to store the extracted characters are allocated by calling wstring_alloc, and the previous contents of the WString_var are released by calling wstring_free.
Actions taken:
April 21, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2640: IDL that is not IDL! (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The C++ language mapping chapter contains many blocks of IDL like stuff
 with the comment 
 
 // IDL
 
 in the first line, but the stuff in the block is not valid IDL for
 various reasons:
 
 (i) Uses "pseudo" as an apparent keyword.
 
 (ii) Contains declarations like
 
 	attribute exception exception;
 
 I suggest that the comment "// IDL" be replaced by "// Augmented IDL
 (see "Usage" on page x-y)" cross-referencing to section 20.23 Usage, so
 that people know for sure that this is not IDL.
 
 Furthermore, to make the claim in section 20.23 true, the declaration:
 
 	attribute exception exception;
 
 should be fixed to be something else, or alternatively, the exceptional
 use of exception should be called out as a specific augmentation of IDL
 in section 20.23.
 

Resolution:
Revised Text:
Actions taken:
May 6, 1999: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 2841: Two obvious typos in the C++ mapping for OBV (docs/formal/99-07-41.pdf) (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: - The factories" names in the example IDL on page 1-88 are incomplete
 - Page 1-90: should be CORBA::CustomMarshal rather than
   CORBA::CustomerMarshal. Nice freudian slip. Might it be that the OBV
   mapping was done by marketeers rather than technicians?
 

Resolution: Close as duplicate of 2354.
Revised Text:
Actions taken:
August 15, 1999: received issue
August 15, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2875: ValueBase::_copy_value clarification (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: The ValueBase::_copy_value() function is included in the discussion
 of the "reference counting interface" in section 1.17.5 of 99-07-41.
 Later, the description of the reference counting mix-in classes
 says:
 
   "Each of these classes shall be fully concrete and shall completely
    fulfill the ValueBase reference counting interface..."
 
 However, I do not believe that the intent was to require the mix-in
 classes to implement _copy_value().
 
 Therefore I suggest one of two clarifications:
 
 1) Move the discussion of _copy_value() out of the reference-counting
     section, or
 
 2) Specify which functions the mix-in classes are actually expected to
     implement, e.g.,
 
     "Each of these classes shall be fully concrete and shall completely
      fulfill the ValueBase reference counting interface (_add_ref,
      _remove_ref, and _refcount_value), ..."
 

Resolution:
Revised Text:
Actions taken:
September 9, 1999: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 2880: Union string member mapping defect? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 
 The mapping for string members has modifier functions for "char *",
 "const char *", and "String_var".  Shouldn"t there also be a modifier
 function that takes the unnamed struct string member and array string
 member types?
 

Resolution: closed/resolved
Revised Text: Change the paragraph in 1.12 of formal/99-07-41 that reads: For string union members, the char* modifier results in the freeing of old storage before ownership of the pointer parameter is assumed, while the const char* modifier and the String_var modifier both result in the freeing of old storage before the parameter's storage is copied. The accessor for a string member returns a const char* to allow examination but not modification of the string storage. to: For string union members, the char* modifier results in the freeing of old storage before ownership of the pointer parameter is assumed, while the const char* modifier and the String_var modifier both result in the freeing of old storage before the parameter's storage is copied. The accessor for a string member returns a const char* to allow examination but not modification of the string storage. The union will also provide modifier functions that take the unnamed string struct member, array member and sequence member types as a parameter, with the same semantics as the String_var modifier.
Actions taken:
September 4, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2887: Contents of string members (01) (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 1.  What is the contents of a string member of a struct, sequence, array
 or exception after out() or _retn() has been called?  Is it a null
 pointer, or an empty string?
 
 I think that for best consistency, it should be an empty string, which
 is the same state after default construction.
 

Resolution: closed/resolved
Revised Text: Add the following to the end of the first paragraph of section 1.7 of formal/99-07-41: Calling the out() or _retn() functions of a String_var has the side effect of setting its internal pointer back to null. An application may also explicitly assign a null pointer to the String_var.
Actions taken:
September 14, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2888: Contents of string members (02) (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: 2.  Should it be legal to assign a null pointer to a string member of a
 struct, sequence, array or exception?

Resolution: closed/resolved
Revised Text: Add the following to the end of the first paragraph of section 1.7 of formal/99-07-41: Calling the out() or _retn() functions of a String_var has the side effect of setting its internal pointer back to null. An application may also explicitly assign a null pointer to the String_var.
Actions taken:
September 14, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2890: String extractor semantics undefined? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: CORBA 2.3 added the requirement (1.7 & 1.8) that string extractor
 operators be defined for String_var & string member classes, for
 example:
 
 std::istream& operator >>(std::istream &, CORBA::String_var &);
 
 However, the semantics of the extractor operations is undefined.  Does
 the extractor operator extract characters until the first whitespace? 
 until a newline?  until the default width of the stream?  until eof?
 
 The same applies to wide strings.
 

Resolution: closed/resolved
Revised Text: Add the following to the last sentence in Section 1.7 of formal/99-07-41: The operator>> extraction operator has the same semantics as the underlying standard C++ operator>> for extracting strings from an input stream (extracting until whitespace or end of file). Space to store the extracted characters are allocated by calling string_alloc, and the previous contents of the String_var are released by calling string_free. Add the following to the last sentence in Section 1.8: The operator>> extraction operator has the same semantics as the underlying standard C++ operator>> for extracting wide strings from an input stream (extracting until whitespace or end of file). Space to store the extracted characters are allocated by calling wstring_alloc, and the previous contents of the WString_var are released by calling wstring_free.
Actions taken:
September 14, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2895: Exception::_raise() should be const? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
Summary: There is no reason that the _raise() function for CORBA::Exception
 should not be const.  We should change it"s signature to:
 
 class Exception {
 public:
     ...
     void _raise() const = 0;
     ...
 };
 

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
September 20, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2897: Exception constructors should be protected (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The constructors for CORBA::Exception, CORBA::SystemException and
CORBA::UserException should be protected, not public, since there is no
reason for a direct instance of these classes ever to be instantiated.

Resolution: Close no change. Base exception classes are abstract, so this change is not necessary.
Revised Text: Place the constructors, copy constructor, and assignment operator of Excep-tion, SystemException, and UserException into a protected section. This change affects section 1.19 and sections 1.41.7 - 1.41.9.
Actions taken:
October 15, 1999: received issue
June 13, 2000: closed issue
May 13, 2002: closed issue

Discussion:


Issue 2902: Unary operators for Fixed class have wrong return types (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
Some of the unary operators for the Fixed class have the wrong return
type:

Resolution: Close no change. This issue is already addressed in the CORBA 2.3 specification.
Revised Text:
Actions taken:
September 20, 1999: received issue
June 13, 2000: closed issue

Discussion:


Issue 2946: CORBA 2.3 Editorial problem in TypeCode (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
Sections 1.32.2 and 1.41.20 have TypeCode::type_modifier() returning a
ValuetypeModifier.  It should be ValueModifier instead.

--

Resolution: editorial fix...isssue closed
Revised Text: Editorial fix. In the TypeCode class shown in 1.32 of formal/99-07-41, change the following member function: ValuetypeModifier type_modifier() const; to: ValueModifier type_modifier() const;
Actions taken:
October 21, 1999: received issue
June 13, 2000: closed issue

Issue 2947: Object _out class copy constructor & assignment op wrong (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
Issue 1776 was supposed to change all T_out classes so that their copy
constructor and assignment operators took a "const T_out &".  The _out
class in 1.3.6 didn't get updated with this change.

Resolution: closed/resolved
Revised Text: Change the copy constructors and assignment operators for the A_out class in 1.3.6 of formal/99-07-41 to: class A_out { ... A_out(const A_out& a) : ptr_(a.ptr_) {} A_out& operator=(const A_out& a) { ptr_ = a.ptr_; return *this; } ... };
Actions taken:
October 18, 1999: received issue
June 13, 2000: closed issue

Issue 2948: Editorial typo in Section 1.36.3 of C++ mapping (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The code example has a "ServantBaseBase_var".

Resolution: closed, editorial fix
Revised Text: Editorial fix. In the ServantBase_var class shown in section 1.36.3 of formal/99-07-41, change the following line: operator=(const ServantBaseBase_var& b) to: operator=(const ServantBase_var& b)
Actions taken:
October 13, 1999: received issue
June 13, 2000: closed issue

Issue 2949: Fixed(const char *) constructor problem (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The CORBA 2.3 C++ spec says (1.11):

"The Fixed(char*) constructor converts a string representation of a
fixed-point literal into a real fixed-point value, with the trailing 'd'
or 'D' optional."

However, the CORBA 2.3 spec for a fixed point literal says (3.2.5.5):

"A fixed-point decimal literal consists of an integer part, a decimal
point, a fraction part and a d or D. The integer and fraction parts both
consist of a sequence of decimal (base 10) digits. Either the integer
part or the fraction part (but not both) may be missing; the decimal
point (but not the letter d (or D)) may be missing."

This means that the following call is illegal:

	CORBA::Fixed	f("-1.0");

Even though this can be rewritten (legally) as:

	CORBA::Fixed	f(-CORBA::Fixed("1.0"));

I think it would be a good idea change the definition of the constructor
to also allow an optional sign (+ or -).

Resolution: closed/resolved
Revised Text: Change the sentence in Section 1.11 of formal/99-07-41 describing the Fixed(char *) constructor from: The Fixed(char*) constructor converts a string representation of a fixed-point literal into a real fixed-point value, with the trailing 'd' or 'D' optional. to: The Fixed(char*) constructor converts a string representation of a fixed-point literal, with an optional leading sign (+ or -) and an optional trailing 'd' or 'D', into a real fixed-point value.
Actions taken:
September 24, 1999: received issue
June 13, 2000: closed issue

Issue 2950: Fixed::round and truncate issue (cxx_revision)

Click
here for this issue's archive.
Source: Progress Software (Mr. Steve Vinoski, steve.vinoski(at)iona.com)
Nature: Uncategorized Issue
Severity:
Summary:
The Fixed::round() and Fixed::truncate() functions do not mention what to
do if their scale argument is larger than the current scale. I figure they
shouldn't do anything -- for example, "truncating" by making something have
more digits doesn't seem to make sense. I propose adding the sentence below
after the sentence reading "The round and truncate functions convert a
fixed value to a new value with the specified scale." (page 23-32 of
ptc/99-03-04):

If the new scale is equal to or larger than the new scale, no rounding or
truncation is performed and the result is equal to the target object.

Resolution: closed/resolved
Revised Text: Change the paragraph in section 1.11 of formal/99-07-41 describing Fixed::round and Fixed::truncate from: The round and truncate functions convert a fixed value to a new value with the specified scale. If the new scale requires the value to lose precision on the right, the round function will round away from zero values that are halfway or more to the next absolute value for the new fixed precision. The truncate function always truncates the value towards zero. For example: to: The round and truncate functions convert a fixed value to a new value with the specified scale. If the new scale requires the value to lose precision on the right, the round function will round away from zero values that are halfway or more to the next absolute value for the new fixed precision. The truncate function always truncates the value towards zero. If the value currently has fewer digits on the right than the new scale, round and truncate return the argument unmodified. For example:
Actions taken:
September 29, 1999: received issue
June 13, 2000: closed issue

Issue 2951: Inconsistency in 1.7 and 1.9 of mapping (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
Minor editorial issue:

In Section 1.9.2, "T_out Types":

	class T_out {
	public:
	   //...
	   T_out(const T_out& p) : ptr_(p.ptr_) {}
	   T_out& operator=(const T_out& p) { ... }
	};

In Section 1.7, "Mapping for String Types":

	class String_out {
	public:
	   // ...
	   String_out(String_out& s) : ptr_(s.ptr_) {}
	   String_out& operator=(String_out& s) { ... }
	};

Note the missing "const" in 1.7. I suspect String_out should do the
same as T_out and pass const references.

Resolution: closed/resolved
Revised Text: Change the signatures of the copy constructor and default assignment operator for the String_out class on page 1-19 of formal/99-07-41 from: String_out(String_out& s) String_out& operator=(String_out& s) to: String_out(const String_out& s) String_out& operator=(const String_out& s) so that they match the general T_out type definition on page 1-26.
Actions taken:
October 11, 1999: received issue
June 13, 2000: closed issue

Issue 2966: Standard object operations & DynamicImplementation (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The CORBA 2.3 spec needs to make it clear that for dynamic
implementations, invocations of the standard object operations
(get_interface, is_a, non_existent) call the virtual functions defined
in PortableServer::ServantBase, and do not call
PortableServer::DynamicImplementation::invoke().

Resolution: closed/resolved
Revised Text: n section 1.38.3 of formal/99-07-41, change the fourth paragraph from: The invoke() method receives requests issued to any CORBA object incarnated by the DSI servant and performs the processing necessary to execute the request. to: The invoke() method receives requests issued to any CORBA object incarnated by the DSI servant and performs the processing necessary to execute the request. Requests for the standard object operations (_get_interface, _is_a, and _non_existent) do not call invoke(), but call the corresponding functions defined in ServantBase instead.
Actions taken:
October 14, 1999: received issue
June 13, 2000: closed issue

Issue 2967: NamedValue not only an NVList element (cxx_revision)

Click
here for this issue's archive.
Source: Hewlett-Packard (Mr. Owen Rees, Owen_Rees(at)hpl.hp.com)
Nature: Uncategorized Issue
Severity:
Summary:
In formal/99-07-41 section 1.28 "NamedValue" it says "NamedValue is used
only as an element of NVList, especially in the DII." but this is not
correct. Note the remark in section 1.33.3 "Differences from C-PIDL" which
describes other uses: "Added create_named_value, which is required for
creating NamedValue objects to be used as return value parameters for the
Object::create_request operation." 

Resolution: editorial fix, issue closed
Revised Text: Editorial fix. In section 1.28 of formal/99-07-41, change this sentence: NamedValue is used only as an element of NVList, especially in the DII. to: NamedValue is used as an element of NVList and for return values in the CORBA::Object::create_request operation.
Actions taken:
September 27, 1999: received issue
June 13, 2000: closed issue

Issue 3055: _default_POA (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
what should _default_POA() return if no default ORB exists in the server
(that is, ORB_init() with an empty ORB ID was never called)?

Resolution:
Revised Text:
Actions taken:
November 23, 1999: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3074: Problem with AbstractBase definition (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
In the CORBA 2.3 spec, section 6.2, CORBA::AbstractBase is defined as:

module CORBA {
    native AbstractBase;
};

This implies that the C++ mapping for AbstractBase when used as a
parameter is like this:

class DataOutputStream { // from CORBA 2.3, section 5.5.2
    void write_Abstract(AbstractBase value);
};

But section 1.18.1 of the CORBA 2.3 C++ mapping makes it clear that the
signature should be:

class DataOutputStream { // 
    void write_Abstract(AbstractBase_ptr value);
};

Now I know that DataInputStream & DataOutputStream can be special cased
to handle this, but if we need to add additional operations that use
AbstractBase in the future, it would be nice if this could be fixed to
behave consistently with the other native type mappings to C++.

Resolution:
Revised Text:
Actions taken:
December 2, 1999: received issue
December 7, 1999: moved from Core to C++ RTF

Discussion:
deferred in June 2011 to the next RTF


Issue 3078: 1 of 4 issues with Abstract interfaces (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
1.  The resolution that we seemed to be converging on for issue 674
allows programmers to inherit servant implementations like this:

// IDL

interface A {
};

interface B : A {
};

// C++

class MyA : public virtual POA_A {
};

class MyB : public virtual POA_B, public virtual MyA {
};

However, this paradigm breaks when using abstract interfaces:

// IDL
abstract interface A {
};

interface B : A {
};

since the spec does not require a POA skeleton be generated for A.

I think we should change the spec to state that POA skeletons for
abstract interfaces are generated, but that these skeletons do not
inherit from ServantBase, and do not contain a _this() member function. 
This will allow inheritence of implementations, even for abstract
interfaces.

I considered just having POA_B just inherit directly from the abstract
class A, but that would allow POA_B skeletons to be widened implicitly
to an abstract interface pointer (for implementations which define A_ptr
as A *), and that seems to be too trouble prone.  If someone can think
of a way to do this and prevent implicit widening, then this would be
better, since it would even allow sharing of implementation between a
servant and a valutype that both inherit from the same abstract
interface.

Resolution: resolved/closed
Revised Text: Add the following to the end of section 1.36.6 of formal/99-07-41: For interfaces which inherit from one or more base interfaces, the generated POA skeleton class uses virtual inheritance: // IDL interface A { ... }; interface B : A { ... }; interface C : A { ... }; interface D : B, C { ... }; // C++ class POA_A : public virtual PortableServer::ServantBase { ... }; class POA_B : public virtual POA_A { ... }; class POA_C : public virtual POA_A { ... }; class POA_D : public virtual POA_B, public virtual POA_A { ... }; 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: // C++ class A_impl: public virtual POA_A { ... }; class B_impl: public virtual POA_B, public virtual A_impl {}; For interfaces which inherit from an abstract interface, the POA skeleton class is also virtually derived directly from the abstract interface class, but with protected access: // IDL abstract interface A { ... }; interface B : A { ... }; // C++ class A { ... }; class POA_B : public virtual PortableServer::ServantBase, protected virtual A { ... }; The abstract interface is inherited with protected access to prevent accidental conversion of the POA skeleton pointer to an abstract interface reference, for ORBs which implement object references as pointers. This also allows implementation classes and valutypes to share an implementation of the abstract interface: // IDL valuetype V : supports A { ... }; // C++ class MyA : virtual A { ... }; class MyB : public virtual POA_B, protected virtual MyA { ... }; class MyV : public virtual V, public virtual MyA { ... };
Actions taken:
December 4, 1999: received issue
June 13, 2000: closed issue

Issue 3079: 2 of4 issues with Abstract interfaces (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
2.  I do not understand this bullet in section 1.18.2:

"o  Inserting an abstract interface reference into a CORBA::Any operates
polymorphically; either the object reference or valuetype to which the
abstract interface reference refers is what actually gets inserted into
the Any. Because abstract interfaces cannot actually be inserted into an
Any, there is no need for abstract interface extraction operators,
either. The CORBA::Any::to_abstract_base type allows the contents of an
Any to be extracted as an AbstractBase if the entity stored in the Any
is an object reference type or a valuetype directly or indirectly
derived from the AbstractBase base class. See Section 1.16.6,  Widening
to Abstract Interface,  on page 1-62 for details."

This seems to make no sense.  It seems to state that the actual
reference or valuetype is inserted into the Any, which means that the
TCKind associated with the any will be tk_objref or tk_value, not
tk_abstract_interface.  This seems to have particularly bad implications
with the DII & DSI.  How does the DII know to encode an abstract
interface correctly in CDR if the Any it receives doesn't have a
tk_abstract_interface TypeCode?  It also means that an application which
only knows the abstract interface type must handle the case where the
Any has a tk_objref or tk_value instead, use Any::to_abstract_interface
and then a narrow call to get the abstract interface pointer it needs.

This seems needlessly complex and unnecessary.  This bullet should be
replaced with one that just states that abstract interfaces have
inserters and extractors generated for them just like normal interfaces.

Resolution: closed/resolved
Revised Text: Replace the fourth bullet in Section 1.18.2 of formal/99-07-41 with: Normal Any insertion and extraction operators are generated for abstract interfaces. The Any::to_object, Any::to_abstract_base and Any::to_value types can be used to extract the contents of an Any as a generic object reference, abstract object reference, or valuetype. Add before the last paragraph of 1.16.6: The caller is responsible for releasing the returned AbstractBase_ptr. Add a new section 1.16.7, before the existing 1.16.7: 1.16.7 Widening to ValueBase The CORBA::Any::to_value type allows the contents of an Any to be extracted as an ValueBase * if the entity stored in the Any is a valuetype. The to_value type is shown below: // C++ class Any { public: ... struct to_value { to_value(ValueBase *& base) : ref(base) {} AbstractBase_ptr& ref; }; Boolean operator>>=(to_value val) const; ... }; The caller is responsible for calling _remove_ref() on the returned ValueBase pointer. See Section 1.17.5, ValueBase and Reference Counting, on page 1-XXX for a description of ValueBase.
Actions taken:
December 4, 1999: receive dissue
June 13, 2000: closed issue

Issue 3080: don't understand the last paragraph of 1.18.2: (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
"Both interfaces that are derived from one or more abstract interfaces,
and valuetypes that support one or more abstract interfaces support
implicit widening to the _ptr type for each abstract interface base
class. Specifically, the T* for valuetype T and the T_ptr type for
interface type T support implicit widening to the Base_ptr type for
abstract interface type Base. The only exception to this rule is for
valuetypes that directly or indirectly support one or more regular
interface types (see Section 1.17.9,  Valuetype Inheritance,  on page
1-83). In these cases, it is the object reference for the valuetype, not
the pointer to the valuetype, that supports widening to the abstract
interface base."

This seems to prohibit widening from a valuetype pointer to an abstract
interface _ptr if the valuetype happens to support a normal interface. 
I don't understand the restriction.  This seems to prohibit the
programmer making a choice of using value or reference semantics in the
case of diamond inheritence of an abstract interface:

// IDL
abstract interface A {
};

interface I : A {
};

valuetype V1 : supports A {
};

valuetype V2 : supports I {
};

This means that I must always pass V2 valuetypes by reference to
operations expecting an A, and cannot choose to pass V2 valuetypes by
value instead.  Why was this restriction added and what would be the
problem with relaxing it in this case?

Resolution: see below
Revised Text: Replace the last paragraph of 1.18.2 with: “Both interfaces that are derived from one or more abstract interfaces, and valuetypes that support one or more abstract interfaces support implicit widening to the _ptr type for each abstract interface base class. Specifically, the T* for valuetype T and the T_ptr type for interface type T support implicit widening to the Base_ptr type for abstract interface type Base. The only exception to this rule is for valuetypes that only support an abstract interface indirectly via support for a regular interface type (see Section 1.17.9, “Valuetype Inheritance,” on page 1-85). In this case, it is the object reference for the valuetype, not the pointer to the valuetype, that supports widening to the abstract interface base. If a valuetype supports an abstract interface directly (or inherits that support via derivation from another valuetype) and at the same time supports a normal interface that inherits from the same abstract interface, then either the valuetype pointer, or the object reference may be widened to the abstract interface.”
Actions taken:
December 4, 1999: received issue
October 3, 2001: closed issue

Issue 3081: 4 of 4 issues with Abstract interfaces (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
4.  Is there any merit in adding narrow operations to AbstractBase that
would allow the programmer to narrow to ValueBase or Object_ptr?

Resolution: closed/resolved
Revised Text: In section 1.18.1 of formal/99-07-41, add the following operations to AbstractBase: class AbstractBase { ... public: ... Object_ptr _to_object(); ValueBase * _to_value(); ... }; and the following paragraph: If the concrete type of an abstract interface instance is a normal object reference, the _to_object() function returns a reference to that object, otherwise it returns a nil reference. If the concrete type is a valuetype, _to_value() returns a pointer to that valuetype, otherwise it returns a null pointer. The caller of _to_object() or _to_value() is responsible for properly releasing the returned reference or pointer.
Actions taken:
December 4, 1999: received issue
June 13, 2000: closed issue

Issue 3092: Need Any::to_value operation? (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
Given that we have Any::to_object and Any::to_abstract_base, shouldn't
there be an Any::to_value_base as well?

Resolution: closed/resolved
Revised Text: Replace the fourth bullet in Section 1.18.2 of formal/99-07-41 with: Normal Any insertion and extraction operators are generated for abstract interfaces. The Any::to_object, Any::to_abstract_base and Any::to_value types can be used to extract the contents of an Any as a generic object reference, abstract object reference, or valuetype. Add before the last paragraph of 1.16.6: The caller is responsible for releasing the returned AbstractBase_ptr. Add a new section 1.16.7, before the existing 1.16.7: 1.16.7 Widening to ValueBase The CORBA::Any::to_value type allows the contents of an Any to be extracted as an ValueBase * if the entity stored in the Any is a valuetype. The to_value type is shown below: // C++ class Any { public: ... struct to_value { to_value(ValueBase *& base) : ref(base) {} AbstractBase_ptr& ref; }; Boolean operator>>=(to_value val) const; ... }; The caller is responsible for calling _remove_ref() on the returned ValueBase pointer. See Section 1.17.5, ValueBase and Reference Counting, on page 1-XXX for a description of ValueBase.
Actions taken:
December 4, 1999: received issue
June 13, 2000: closed issue

Issue 3101: _var types for fixed-length underlying types (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
the spec currently is extremely vague about how _var types for fixed-length
underlying types are supposed to work. The only words are:

	The T_var types are also produced for fixed-length structured
	types for reasons of consistency. These types have the same
	semantics as T_var types for variable-length types. This allows
	applications to be coded in terms of T_var types regardless of
	whether the underlying types are fixed- or variable-length.

This has long been a source of confusion to me. In particular, it doesn't
answer questions such as

	- Can a _var for a fixed-length type be initialized with a pointer
	  to the fixed-length type? If so, does the _var adopt it?

	- Can a _var for fixed-length type be initialized with a value?

	- What does assignment between _vars for fixed-length types do?

	- Does the _var for a fixed-length type work like a reference
	  and remain bound to the same block of memory?

	- What does default-initialization of such a _var do?

	- etc, etc.

Resolution: duplicate of issdue 1521...close issue
Revised Text: On page 1-25 of formal/99-07-41, change the paragraph beginning with "The T_var types are also produced for fixed-length structured types..." to the following: The T_var types are also produced for fixed-length structured types for reasons of consistency. These types have the same semantics as T_var types for variable-length types. This allows applications to be coded in terms of T_var types regardless of whether the underlying types are fixed- or variable-length. T_var types for fixed-length structured types have the following general form: class T_var { public: T_var() : m_ptr(0) {} T_var(T *t) : m_ptr(t) {} T_var(const T& t) : m_ptr(new T(t)) {} T_var(const T_var &t) : m_ptr(0) { if (t.m_ptr != 0) m_ptr = new T(*t.m_ptr); } ~T_var() { delete m_ptr; } T_var &operator=(T *t) { if (t != m_ptr) { delete m_ptr; m_ptr = t; } return *this; } T_var &operator=(const T& t) { if (&t != m_ptr) { T* old_m_ptr = m_ptr; m_ptr = new T(t); delete old_m_ptr; } return *this; } T_var &operator=(const T_var &t) { if (this != &t) { T* old_m_ptr = m_ptr; if (t.m_ptr != 0) m_ptr = new T(*t.m_ptr); else m_ptr = 0; delete old_m_ptr; } return *this; } T* operator->() { return m_ptr; } const T* operator->() const { return m_ptr; } const T& in() const { return *m_ptr; } T& inout() { return *m_ptr; } T& out() { if (m_ptr == 0) m_ptr = new T; return *m_ptr; } T _retn() { return *m_ptr; } private: T* m_ptr; };
Actions taken:
December 9, 1999: received issue
December 9, 1999: closed issue

Issue 3103: Extraction operator for system exceptions? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
currently it is not possible to pull an exception out of an Any generically,
that is, I cannot write:

	const CORBA::SystemException * sep;
	CORBA::Any a;

	// assume a contains a system exception...

	a >>= sep;

Normally, I won't need this. However, it's come up as part of portable
interceptors. For example, I might want to write an interceptor that
logs things, including system exceptions. Now, if I have a system exception
in an Any, the only way to get it out is to successively try to extract
every possible system exception until I find one that works.

That's rather tedious. It would be nicer if I could extract a base
pointer to the actual exception, so I can print the minor number and
completion status.

I would like to suggest adding the following extraction operator:

	Boolean operator>>=(const SystemException * &);

Resolution: closed/resolved
Revised Text: Add the following text on page 1-99 immediately preceding the the heading "1.20 Mapping for Operations And Attributes": For applications using the DII or portable interceptors, it is useful to be able to extract system exceptions generically. The mapping provides the following operator to do this: Boolean operator>>=(const SystemException * & se) const; The operator returns true if the Any on which it is invoked contains a system exception and the ORB has static type information for the actual system exception contained in the Any. In that case, se points at the base part of the actual exception. If the ORB does not have static type information for the system exception, the operator returns TRUE and se points at an instance of CORBA::UNKNOWN. Otherwise, the operator returns false and the value of ep is unchanged.
Actions taken:
December 10, 1999: received issue
June 13, 2000: closed issue

Issue 3110: allocbuf() for bounded sequences? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
What should allocbuf() for a bounded sequence return if I ask for more
elements than the sequence bound? The spec doesn't say. I think it should
return null in this case.

Also, what should allocbuf() return if I ask for zero elements?

Resolution: closed/resolved
Revised Text: Change the code example on page 1-44, second line, to read: char **dyn_arr = StringSeq::allocbuf(); Change the last sentence on page 1-45 to read: For an unbounded sequence of type T, ... Following the code example at the top of page 1-46, insert the following text: For bounded sequences, the following static member functions are provided in the sequence class public interface: signature: static T *allocbuf(); static T *allocbuf(ULong nelems); // Deprecated static void freebuf(T *); For bounded sequences, the first (zero parameter) version of allocbuf() allocates a buffer of maximum() elements. A null pointer is returned if the function cannot allocate the requested vector. Note that the version of allocbuf that accepts an element count is deprecated for bounded sequences and will be removed in a future version of the mapping. Calls to the deprecated version with an argument value other than the sequence maximum have implementation-dependent behavior. Change the first sentence of the last para of section 1.13.3 to read: Vectors allocated by allocbuf must be freed using the freebuf function. Issue 3110(b) Issue summary: what is the return value of allocbuf() when passed an argument value of zero? Click here for issue details. Proposed Resolution: Add the following paragraph before 1.13.4 on page 1-46: A call to allocbuf with a zero argument causes allocbuf to allocate a zero-length buffer and return a pointer to it. Like any buffer returned from allocbuf, this buffer must be freed using the corresponding freebuf.
Actions taken:
December 11, 1999: receive dissue
June 13, 2000: closed issue

Issue 3111: Abstract interface and DSI issue with C++ (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
There doens't appear to be any portable way to implement an object that
inherits from an abstract interface using the DSI in C++ without compile
time knowledge of the abstract interface.  The basic problem is that I
can create an object reference from a POA, but there is no way to
convert the reference into an abstract interface reference so that I can
send it out on the wire.

We need some mechanism to coerce an object reference into an abstract
interface reference (with a runtime check) to make this work.

Resolution:
Revised Text:
Actions taken:
December 10, 1999: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3113: Any::to_abstract_base needs statement about memory management (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The description of Any::to_abstract_base does not have any information
about its memory managment implications.  It should have the equivalent
semantics to Any::to_object, and require the resulting reference to be
released by the caller.

Resolution: closed/resolved
Revised Text: Replace the fourth bullet in Section 1.18.2 of formal/99-07-41 with: Normal Any insertion and extraction operators are generated for abstract interfaces. The Any::to_object, Any::to_abstract_base and Any::to_value types can be used to extract the contents of an Any as a generic object reference, abstract object reference, or valuetype. Add before the last paragraph of 1.16.6: The caller is responsible for releasing the returned AbstractBase_ptr. Add a new section 1.16.7, before the existing 1.16.7: 1.16.7 Widening to ValueBase The CORBA::Any::to_value type allows the contents of an Any to be extracted as an ValueBase * if the entity stored in the Any is a valuetype. The to_value type is shown below: // C++ class Any { public: ... struct to_value { to_value(ValueBase *& base) : ref(base) {} AbstractBase_ptr& ref; }; Boolean operator>>=(to_value val) const; ... }; The caller is responsible for calling _remove_ref() on the returned ValueBase pointer. See Section 1.17.5, ValueBase and Reference Counting, on page 1-XXX for a description of ValueBase.
Actions taken:
December 12, 1999: received issue
June 13, 2000: closed issue

Issue 3150: Exceptions in servant constructors (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
I think we have a defect/omission in the C++ mapping with respect
to exception safety. Consider a servant class with a constructor:

	class FooImpl : public virtual POA_Foo {
	public:
		FooImpl();
		// ...
	};

Consider what happens if FooImpl() throws an exception for some reason.
By the time FooImpl() runs, the base class constructor POA_Foo() has run
already. So, when the compiler deals with the exception, it invokes
~POA_Foo().

The problem arises because, in our implementation at least, ~POA_Foo()
checks if the reference count is zero and asserts if not.

Resolution:
Revised Text:
Actions taken:
December 20, 1999: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3161: _out types and nested calls (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
consider:

	// IDL

	struct VariableStruct { ... };

	interface I
	{
	    void foo(out VariableStruct s);
	    void bar(out VariableStruct s);
	};

Then:


	// C++
	void
	MyImplForI::foo(VariableStruct_out s)
	{
	    bar(s);
	    bar(s);	// Leak here
	}

	void
	MyImplForI::bar(VariableStruct_out s)
	{
	    s = new VariableStruct;
	}

The freeing of memory for out params relies on the default conversion
by the _out constructor from a pointer to the _out type which, as a
side effect, frees the memory return by the previous call. However,
in this case, and _out param is passed to another call, so the
assignment operator runs, not the constructor:

	T_out& operator=(T* p) { ptr_ = p; return *this; }

The assignment operator doesn't free the previous memory, so we get
the leak.

Should the assignment operator be changed?

Resolution:
Revised Text:
Actions taken:
December 22, 1999: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3165: C++: ostream insertion (cxx_revision)

Click
here for this issue's archive.
Source: UBS (Mr. Hans Kneubuehl, hans.kneubuehl(at)ubs.com)
Nature: Uncategorized Issue
Severity:
Summary:
Many ORBs provide ostream insertion for exceptions as an extension to C++ 
mapping. Typically, applications are required to use them (there is not really 
a usable alternative) to write code in the following style:

    try
    {
       // do some operations
    }
    catch (CORBA::Exception & ex)
    {
        cerr << "some operation failed: " << ex << endl;
    }

This breaks portability as not all ORBs provide the functionality in the same 
way. Therefore ostream insertion should be part of the standard.

Resolution: closed issue, duplicate of 266
Revised Text:
Actions taken:
December 23, 1999: received issue
December 23, 1999: closed issue, duplicate of 266

Discussion:
Date: Fri, 24 Dec 1999 07:30:24 +1000 (EST)
From: Michi Henning <michi@ooc.com.au>
To: Juergen Boldt <juergen@omg.org>
cc: issues@emerald.omg.org, cxx_revision@emerald.omg.org
Subject: Re: issue 3165 -- C++ RTF issue
In-Reply-To: <4.1.19991223114858.00992cc0@emerald.omg.org>
Message-ID: <Pine.HPX.4.05.9912240725430.12793-100000@bobo.ooc.com.au>
Organization: Object Oriented Concepts
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
X-UIDL: Yp]!!J5%"!JIGe9nUI!!

On Thu, 23 Dec 1999, Juergen Boldt wrote:

> This is issue # 3165
> 
> C++: ostream insertion

Juergen,

that's a duplicate of 266, for which a proposal is currently up for vote.
So, 3165 can be closed as a duplicate.

							





Issue 3206: Valuetype code typo in CORBA 2.3 C++ mapping (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
Section 1.17.10.2, the definition of operator= for ValueFactoryBase_var
has "ValueFactoryBaseBase_var".

Resolution: fixed editorially...issue closed
Revised Text:
Actions taken:
January 11, 2000: received issue
February 3, 2000: closed issue

Issue 3217: Any and UnknownUserException (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
The mapping requires that it must be possible to insert CORBA::Exception
into an any (section 1.19.2).

Question: Is it possible to insert UnknownUserException into an Any?

If the answer is yes, what are the members of UnknownUserException, what
is its CDR representation, and what is its TypeCode?

If the answer is no, we should clearly state this and specify what happens
if I attempt to insert UnknownUserException into an Any.

Resolution:
Revised Text:
Actions taken:
January 13, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3222: C++ valuetype issue (01) (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
 The CORBA 2.3 C++ mapping makes no mention of _out types for
valuetypes.  Clearly this is needed and should be mentioned.

Resolution: see below
Revised Text: Change the paragraph in 1.17, page 1-67 that reads: "As for most other types in the C++ mapping, each valuetype also has an associated C++ _var type that automates its reference counting." To: "As for most other types in the C++ mapping, each valuetype also has associated C++ _var and _out types that automate its reference counting."
Actions taken:
January 15, 2000: received issue
October 3, 2001: closed issue

Issue 3223: Valuebox for object reference underspecified (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The CORBA 2.3 C++ mapping for valueboxes (1.17.7.2) does not specify the
behavior of the constructors, assignment operator and _value modifier
method with respect to the object reference argument.  These methods
clearly need to call _duplicate on their argument, since the valuebox
must manage its own memory.

Proposal:

Add the following paragraph just before the example in 1.17.7.2:

Value box classes for object reference maintain a private managed copy
of the object reference.  The constructor, assignment operator and
_value modifier method for these classes call _duplicate on the object
reference argument, and the destructor calls CORBA::release on the boxed
reference.

Resolution: see below
Revised Text: Add the following paragraph just before the example in 1.17.7.2: "Value box classes for object reference maintain a private managed copy of the object ref-erence. The constructor, assignment operator and _value modifier method for these classes call _duplicate on the object reference argument, and the destructor calls CORBA::release on the boxed reference."
Actions taken:
January 15, 2000: received issue
October 3, 2001: closed issue

Issue 3224: C++ Value Type issue (02) (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
2.  Valuetypes should have _var typedef inside the class to aid template
programming just like objects, structs and unions.

Resolution: see below
Revised Text: Right after the paragraph in 1.17 that starts: "As for most other types in the C++ mapping, each valuetype ..." add the following: "To facilitate template-based programming, a typedef for the _var type is also provided in the valuetype class. The typedef for A_var is named A::_var_type." Also add the appropriate typedef declarations to the examples in 1.17.1, 1.17.4, 1.17.7.2, 1.17.7.3, 1.17.7.4, 1.17.7.5, 1.17.7.6 and 1.17.12.
Actions taken:
January 15, 2000: received issue
October 3, 2001: closed issue

Issue 3225: C++ ValueBox & Fixed question (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
Section 1.17.7.5 states:  "Value boxes for these types [including Fixed]
map to classes that have exactly the same public interfaces as the
underlying boxed types...".

Does this also include overloaded operators that are defined in the
Fixed class?

It sure seems weird to allow some operators to work but not others:

// IDL
valuetype FixedVal fixed<5,2>;

// C++
    FixedVal	*fv = ...;

    ++fv;	// legal?

    CORBA::Fixed	f = fv * 2;	// illegal?

Resolution:
Revised Text:
Actions taken:
January 15, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3239: Obsolete text in 1.40.3 (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The last C++ RTF made changes that identify specific inheritence
strategies must be used for generating code for interfaces that inherit
from abstract interfaces.  The text in 1.40.3 was not updated to reflect
this, and still suggests that other strategies are possible, when they
are no longer allowed.

Resolution: see below
Revised Text: Remove the second paragraph of 1.40.3: "The requirements for the C++ server-side mapping for abstract interfaces are therefore quite simple:" and the following bullet item.
Actions taken:
January 19, 2000: received issue
October 3, 2001: closed issue

Issue 3242: C++ spec: Valuebase missing get_value_def (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
In section 1.17.5, the C++ class for Valuebase does not show the
get_value_def operation.

Resolution:
Revised Text:
Actions taken:
January 21, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3245: Construction of _var types (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
the spec says (on page 1-23):

	The T* constructor creates a T_var that, when destroyed, will
	delete the storage pointed to by the T* parameter. The parameter
	to this constructor should never be a null pointer. Compliant
	implementations are not required to detect null pointers passed
	to this constructor.

This seems broken for two reasons:

	- In an environment without real exceptions, null pointers must
	  be returned for variable-length types in the presence of an
	  exception. So if I write

		Foo_var fv(some_ref->op(my_corba_environment));
	
	  and op() raises an exception (which will be returned in the
	  environment), I'm hosed.

	- The assignment operator permits assignment of null, but the
	  constructor doesn't. This is inconsistent, if nothing else.

It seems that disallowing initialization from null pointer is some
historical hangover? I think the restriction should be removed.

Resolution:
Revised Text:
Actions taken:
January 25, 2000: received sisue

Discussion:
deferred in June 2011 to the next RTF


Issue 3246: UnknownUserException and stubs (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
the spec currently says (page 1-101):

	Request invocations made through the DII may result in
	user-defined exceptions that cannot be fully represented
	in the calling program because the specific exception type
	was not known at compile-time. The mapping provides the
	UnknownUserException so that such exceptions can be represented
	in the calling process: [...]

Here is a code snippet for the DII:

	req->invoke();
	if (req->env()->exception()) {
		// Got an exception
		CORBA::Exception * ep = req->env()->exception();
		// ...
	}

The para on page 1-101, by implication, says that:

	- If there are concrete C++ types available in the caller that
	  can represent the user exception, a real user exception is
	  instantiated and the pointer returned by exception() points
	  at the concrete user exception instance.

	- If there is no concrete C++ type available in the caller for
	  a user exception, the pointer returned by exception() points
	  at an instance of UnknownUserException.

It's not as clearly spelled out as this, but it can be implied from the
words on page 1-101.

This is bad. For one, it implies "action at a distance". For example,
linking the stubs for a user exception into a completely unrelated
part of the same binary (possibly via a library) would change
the behavior of the above DII call. Further, to make this behavior
happen would require some form of global initialization data structure.
In effect, there would have to be something that would let the ORB
know (globally) for which user exceptions stub code is linked in.

We rejected the need for global data recently in another context (for
the proposed extraction operator for user exceptions). For the same reason,
we should reject this here and mandate that, if I use the DII, *all* user
exceptions are *always* returned as UnknownUserException.

Resolution:
Revised Text:
Actions taken:
January 25, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3247: fixed-length _var assignment from pointer (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
the new mapping for _var types for fixed-length underlying types shows:

	T_var &operator=(T *t) {
		if (t != m_ptr) {
			delete m_ptr;
			m_ptr = t;
		}
		return *this;
	}

This guards against self assignment when a pointer is assigned to the _var.

I don't think this is right:

	- Assigning a pointer to a _var that already owns what the pointer
	  points at is almost certainly an error:

	  MyStruct * p = ...;
	  MyStruct_var v = p;	// OK
	
	  // ...

	  v = p;		// Almost certainly an error

	- We don't do the same thing elsewhere. On page 1-13:

	  A_var &operator=(const A_var& a) {
		reset(p); return *this;
	  }

	  This is inconsistent: assignment of a _ptr to a _var reference
	  is not safe against self assignment, so assignment of a pointer
	  to the _var for a fixed-length type shouldn't be either.

Note that the other assignment operators are just fine -- I'm only objecting
to testing for self-assignment for operator= with a pointer as the RHS.
(A nice compiler could even insert an assertions if a _var is assigned the
same thing that it already points at.)

Resolution:
Revised Text:
Actions taken:
January 25, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3248: Object Reference insertion/extration to Any (cxx_revision)

Click
here for this issue's archive.
Source: Cisco Systems (Mr. Paul Kyzivat, pkyzivat(at)cisco.com)
Nature: Uncategorized Issue
Severity:
Summary:
I believe the specification for insertion of object references to Anys is
somewhat ambiguous. And, if it is intended to be as I think, it may also be
less than ideal.

Consider the following idl:

	interface B {...};
	interface D : B {...};

And then consider the following code:

	D_ptr d; // initialize this to non-null value somehow
	B_ptr b = B::_narrow(d);
	Any ab;
	ab <<= b;
	Any ad;
	ad <<= d;
	// ...
	B_ptr b_val;
	if (ab>>=b_val) { /* do stuff with b_val */ }; // 1
	if (ad>>=b_val) { /* do stuff with b_val */ }; // 2
	D_ptr d_val;
	if (ab>>=d_val) { /* do stuff with d_val */ }; // 3
	if (ad>>=d_val) { /* do stuff with d_val */ }; // 4

>From what I can see of the spec, it is a bit unclear about whether then
insertion of an object should use the static type or the dynamic type of the
object to initialize the typecode. Simplicity and consistency with other
related operations suggests that it should use the static type. That is what
we currently do, and a quick test of ORBIX 2000 seems to tell me it does it
that way too.

With that interpretation, 1&4 will work, while 2&3 will fail.
Nobody should be surprised that 3 fails, but it is inconvenient
that 2 doesn't work.

If insertion used the dynamic type of its argument, then 1&2
would work, while 3&4 would fail.

To get reasonable behavior when derived types might be present,
(and how often can you be certain they cannot?)
it seems that one should almost never use type specific object
extraction. Instead, one must do something like:

	Object_var o;
	B_var bv;
	if (ad>>=to_object(o._out()) && 
	    !CORBA::is_nil(bv = B::_narrow(o))) 
		{ // do stuff with bv };

This is unfortunately a bit inconvenient.

So, is there any text in the spec that says, when inserting an object
reference type into an any, if the repository id in the typecode should be
the static type of the inserted argument or the dynamic type of the value of
the argument?

If not, I think we need to add some text. 

Resolution:
Revised Text:
Actions taken:
January 27, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3298: Problem with OBV_ valuetype class constructor (cxx_revision)

Source: Floorboard Software (Mr. Jonathan Biggar,
jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The CORBA 2.3.1 specification does not cover the case of code generation
for the OBV_ class constructor for a valuetype that inherits from
another concrete valuetype:

// IDL
valuetype A {
    octet o1;
};

valuetype B : A {
    octet o2;
};

The generated OBV constructor for class B needs to take both o1 and o2
arguments, so it should look like this:

// C++
class OBV_B {
    ...
protected:
    ...
    OBV_B(Octet init_o1, Octet init_o2)
};

Proposal:

Change the second paragraph of 1.17.2 to read:

"For the same reasons, a C++ OBV_ class defines a protected default
constructor, a protected constructor that takes an initializer for each
valuetype data member, and a protected default constructor. The
parameters of the constructor that takes an initializer for each member
appear in the same order as the data members appear, top to bottom, in
the IDL valuetype definition, regardless of whether they are public or
private. If the valuetype inherits from a concrete valuetype, then
parameters for the data members of the inherited valuetype appear
first.  All parameters for the member initializer constructor follow the
C++ mapping parameter passing rules for in arguments of their respective
types."

Resolution: see below
Revised Text: Change the second paragraph of 1.17.2 to read: "For the same reasons, a C++ OBV_ class defines a protected default constructor, a pro-tected constructor that takes an initializer for each valuetype data member, and a pro-tected destructor. The parameters of the constructor that takes an initializer for each member appear in the same order as the data members appear, top to bottom, in the IDL valuetype definition, regardless of whether they are public or private. If the valuetype inherits from a concrete valuetype, then parameters for the data members of the inherited valuetype appear first. All parameters for the member initializer constructor follow the C++ mapping parameter passing rules for in arguments of their respective types. For value-types that have no operations other than factory initializers, the same constructors and destructors are generated, but with public access so that they can be called directly by application code."
Actions taken:
February 6, 2000: received issue
October 3, 2001: closed issue

Issue 3304: Problem with type specific valuetype factories in CORBA 2.3.1 C++ mapping (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
Section 1.17.10.3 states that type specific valuetype factories are
generated with a public destructor.  This conflicts with the reference
counting requirement for factories, since it makes it easier for
application code to delete a factory that still has outstanding
references.

Proposal:

Change the text in 1.17.10.3 to make destructors for type specific
valuetype factories protected rather than public.

Resolution:
Revised Text: Change the sentence in 1.17.10.3 that reads: "Each generated factory class has a public virtual destructor, a protected default con-structor, and a public _downcast function allowing downcasting from a pointer to the base ValueFactoryBase class." to: "Each generated factory class has a protected virtual destructor, a protected default con-structor, and a public _downcast function allowing downcasting from a pointer to the base ValueFactoryBase class."
Actions taken:
February 9, 2000: received issue
October 3, 2001: closed issue

Discussion:


Issue 3326: ValueBase::_copy_value() function is underspecified (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The CORBA 2.3 C++ mapping is clear on what the use of
ValueBase::_copy_value is, but is unclear as to who is responsible for
providing an overriding definition of this pure virtual function.   Is
it the IDL compiler, generating an overriding _copy_value() function for
each valuetype C++ class, or is the user, when he provides a valuetype
implementation class?

Resolution:
Revised Text:
Actions taken:
February 16, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3328: Do valuetype POA servants get tie templates? (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
Section 1.17.9 states that valuetypes that support a non-abstract
interface have a POA skeleton class generated for them.  Is a tie
template class also supposed to be generated?

Resolution: see below
Revised Text: Add the following to the end of the third bullet in 1.17.9: "No tie skeleton class is generated for the valuetype because the tie for the supported class can be used instead."
Actions taken:
February 17, 2000: received issue
October 3, 2001: closed issue

Issue 3331: Valuetype "copying" semantics underspecified? (C++ issue # 1) (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
C++ issue #1:  The C++ specification should state that valuetype
parameters which are copied by the ORB for collocated invocations are
done using an ORB internal mechanism, not _copy_value().

Resolution:
Revised Text:
Actions taken:
February 18, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3332: Valuetype "copying" semantics underspecified? (C++ Issue # 2) (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
C++ issue #2:  The ValueBase::_copy_value() function should be
deprecated in favor of a new ValueBase::_clone_value() operation:

// IDL
module CORBA {
    abstract valuetype CloneContext { };
};

// C++
namespace CORBA {
    ...
    class ValueBase {
	...
    public:
	ValueBase *_clone_value(CloneContext *&);
    };
    ...
};

The _clone_value() function provides an independant copy of the
valuetype it is invoked on.  Any valuetypes reachable via the state of
the original valuetype are also copied, and relationships between
original valuetype(s) will be preserved in the cloned copies.  The
CloneContext argument provides the necessary state information for the
ORB to properly maintain relationships between copied valuetypes.  If
_clone_value() is called with a null CloneContext, a new CloneContext
will be generated and returned by the ORB as a result of the call.

Resolution:
Revised Text:
Actions taken:
February 18, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3339: ref counting ambiguous? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
For servant reference counting, the words "at least once" appear
in a number of places when it comes to servant activation. set_servant(),
activate_object(), activate_object_with_id(), servant_to_id(),
servant_to_reference(), and _this() all use this language (pages 1-137 and
1-138):

	... will invoke _add_ref at least once on the Servant argument...

Problem: suppose my ORB calls _add_ref() twice in each of these operations
for some reason. I now have a problem. That's because, for servant
activators, responsibility for calling _remove_ref() passes to
etherialize(). However, if the ORB is permitted to call _add_ref() as
many times as it likes, I have no idea how many times I have to call
_remove_ref() from within etherealize(). I think that the spec should say
that _add_ref() is called *exactly* once for these operations *if* the
corresponding servant is not in the AOM already.

I vaguely remember the discussion about optimization of the calls
to _add_ref() and _remove_ref(). I think the idea was to permit the ORB
to avoid redundant calls. However, it seems that the language in the spec
isn't precise enough. Under one interpretation, the refcount counts
the number of entries in the AOM. Under another interpretation, it counts
the number of calls in progress as well (because an ORB could call _add_ref()
when a call is dispatched and call _remove_ref() when it finishes).
Under yet a third interpretation, the refcount counts the number of
object references in my address space. That interpretation is happens
if *every* call to _this() calls _add_ref()...

The language is not precise enough, I think...

Resolution:
Revised Text:
Actions taken:
March 3, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3340: set_servant and null servant (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
the text for set_servant doesn't say what should happen if I call
set_servant(0). I would suggest to throw BAD_PARAM in this case.

Resolution:
Revised Text:
Actions taken:
February 22, 2000: received issue
April 10, 2000: moved from Core to C++ RTF

Discussion:
Transfer to C++ RTF deferred in June 2011 to the next RTF


Issue 3359: Issue with valuetypes & inout/out parameters (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The CORBA 2.3 C++ specification, section 1.22 states that valuetypes
passed as in parameters to an invocation of an object are copied, even
if the object is collocated with the caller.  It does not make this
statement for inout or out parameters (or return results), which
strongly suggests that valuetype copying is not necessary.  In fact, the
text for valuetype inout parameters strongly suggests that copying is
not performed.

I think this is wrong and inout & out valuetypes should be copied as
well (inout parameters should be copied before and after the invocation,
while out and return values should be copied after the invocation
completes.)  Without the copies, call transparency will be broken and
the client can distinguish between a local and a remote call.

Resolution:
Revised Text:
Actions taken:
February 24, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3380: Constructor for structures? (cxx_revision)

Source: Triodia Technologies Pty Ltd (Mr. Michi Henning,
michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
The mapping for user exceptions and structures is identical, except
for one thing: user exceptions have an additional constructor with
one parameter for each member, so I can construct and throw the exception
with a single throw statement.

However, structures are second-class citizens: I can't instantiate and
initialize a structure at the same time. (Well, at least not in general,
because static initialization only works for aggregates and, at any rate,
I can only instantiate and initialize with compile-time constants.)

So, why don't we add the same constructor to the mapping for structures?
It seems inconsistent to have one mapping for structures and a slightly
different one for exceptions, when in fact they both could be the same.

Resolution:
Revised Text:
Actions taken:
March 1, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3381: _name and _rep_id (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
Question: do I need to deallocate the string returned by Exception::_name()
and Exception::_rep_id() or not? The spec doesn't say...

Given that these are PIDL, and that the return value is const char *
(rather than non-const char *), I'd say that I shouldn't have to deallocate
the return value. But I think we should clarify this in the spec.

Also, the Exception class in section 1.41.7 doesn't show the _name and
_rep_id members, so we need to add them there.

Further, Exception doesn't show up in section 1.23 (Mapping of Pseudo
Objects).  I suspect that we need to add Exception there as well and
mention the exception to the memory management rules? Another interesting
thing is that, if Exception is a pseudo object, then UserException and
everything derived from it is also a pseudo object. But, user exceptions
can't be pseudo objects. But, if they are not pseudo-objects, we can't
really make special-purpose memory managment rules. Sigh... :-(

Resolution: see below
Revised Text: Add the following to the end of the second para on page 1-98: The return value of _name() and _rep_id() must not be deallocated. Add the _name() and _rep_id() member functions to section 1.41.7 (they are missing there).
Actions taken:
March 1, 2000: received issue
October 3, 2001: closed issue

Issue 3401: void * operations on Any? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
I seem to remember that we decided to deprecate the void * functions
on type Any. However, looking at the latest C++ draft, they are not
marked as deprecated.

Can anyone remember what we decided to do? Is this a bug in the spec
or a bug in my memory?

Resolution:
Revised Text:
Actions taken:
March 2, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3532: DSI and implicit activation (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
 The C++ "Mapping of PortableServer Dynamic Implementation Routine" states
that "If DynamicImplementation::_this() is invoked outside of the context
of a request invocation on a target object being served by the DSI servant,
it raises the PortableServer::WrongPolicy exception".

 This conflicts with the behaviour of _this() in static skeletons as de-
fined in "Skeleton Operations".

 In particular, this means that DSI servants cannot be implicitly acti-
vated, and therefore, the choice of DSI vs. static skeleton is not trans-
parent to the application integrator.

 Is there any rationale behind this?

Resolution:
Revised Text:
Actions taken:
April 7, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3534: Null assignment to String_var? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
page 1-23 says:

	The T* constructor creates a T_var that, when destroyed, will delete
	the storage pointed to by the T* parameter. The parameter to this
	constructor should never be a null pointer. Compliant implementations
	are not required to detect null pointers passed to this constructor.

So, I can't explicitly initialize with null:

	T_var tv = 0;

This seems strange, seeing that the default constructor does initialize
with null.

Also, the spec doesn't say anything about assignment. Is the following legal?

	T_var tv = ...;
	tv = 0;

I don't understand the restriction. What's the motivation for
disallowing this? Especially for String_var, the prohibition against null
null seems rather draconian. For example, I may be using a temporary local
String_var for exception safety and then, at some point, decide to
assign null to it to force an early deallocation of the string instead
of having to create a separate scope to achieve this.

At any rate, we should clarify so that, whatever the eventual decision is,
the text for the assignment operator agrees with the text for the constructor.

Resolution: see below
Revised Text: Change the second para following the code example on page 1-23 to read: The T* constructor creates a T_var that, when destroyed, will delete the storage pointed to by the T* parameter. It is legal to initialize a T_var with a null pointer. Append the following to the first paragraph of page 1-24: Assigning a null pointer to a T_var is legal and results in deallocation of the data pointed to by the T_var.
Actions taken:
April 7, 2000: received issue
October 3, 2001: closed issue

Issue 3537: Sequence mapping & custom marshalling (cxx_revision)

Click
here for this issue's archive.
Source: Cisco Systems (Mr. Paul Kyzivat, pkyzivat(at)cisco.com)
Nature: Uncategorized Issue
Severity:
Summary:
Section 1.17.11 of ptc/2000-01-02 says that DataInputStream &
DataOutputStream are mapped according to the normal valuetype mappings.
This mapping results in operations that are at best cumbersome to use in
marshalling sequences of primitive types:

Operations read_xxx_array and write_xxx_array are defined, taking argments
of type CORBA::xxxSeq. These are obviously intended to be sufficient for
marshalling all defined sequences of the corresponding primitive type xxx.

However, the c++ mapping for sequences requires that each distinctly
declared sequence type be unique and separately overloadable. This
guarantees that a marshaller attempting to marshal an sequence of primitive
other than CORBA::xxxSeq will not be able to pass that sequence to the
corresponding read_xxx_array and write_xxx_array operations. Instead, code
must be written to bypass strict typing.

To fix this, either the mappings for DataInputStream and DataOutputStream
need to be non-standard, the mapping of sequences needs to change, or the
mapping of CORBA::xxxSeq needs to change to something special.

Resolution:
Revised Text:
Actions taken:
April 10, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3538: Read-only parameter remnants (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
in the resolution to issue 863, we decided to get rid of the read-only
restriction for parameters. However, we forgot to remove a few snippets.

Page 1-110, table, case 3:

	Remove the following text:

	Following the completion of a request, the caller is not allowed
	to modify any values in the returned storage--to do so, the
	caller must first copy the returned instance into a new instance,
	then modify the new instance.

Page 1-110, table, case 6:

	Remove the following text:

	Following completion of a request, the caller is not allowed
	to modify any values in the returned storage--to do so, the
	caller must first copy the returned array instance into a new
	array instance, then modify the new instance.

Resolution:
Revised Text:
Actions taken:
April 11, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3539: Variable-length out params and exceptions (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
the spec is currently not terribly clear about the server's responsibilities
when throwing an exception from an operation that has a variable-length
out param.

The intent of the spec is that the server is responsible for deleting
the memory it allocated to an out param before it throws an exception:

	// Correct implementation
	void
	Foo_impl::
	op(CORBA::String_out out_p) throw(CORBA::SystemException)
	{
		CORBA::String_var tmp = CORBA::string_dup("Hello");

		bar();	// bar() may throw

		out_p = tmp._retn();	// No leak, even if bar() throws
	}

	// Incorrect implementation
	void
	Foo_impl::
	op(CORBA::String_out out_p) throw(CORBA::SystemException)
	{
		out_p = CORBA::string_dup("Hello");

		bar();	// Leak if bar() throws
	}

However, the spec never states this clearly. In fact, it sort of says
the opposite. On page 1-110, table item 3:

	To maintain local/remote transparency, the caller must always
	release the returned storage, regardless of whether the callee
	is located in the same address space as the caller or is located
	in a different address space.

There is no mention here of what should happen in the presence of exceptions.

I think it would be nice to clarify that the skeleton will never look
at an out param in the presence of exceptions and that the operation
implementation is responsible for deallocating memory in this case.

Resolution:
Revised Text:
Actions taken:
April 11, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3562: Supporting typedefs for _var types? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
quite some time ago, we added the _var_type and _ptr_type definitions
to proxies to make it easier to write templates. Similarly, we have
the _whatever_seq typedefs for recursive structs and unions, to avoid
problems with anonymous types.

What's missing at the moment is a similar feature for _var types.
When I'm writing a template that does it's job in terms of _var types,
I also quite often want to do something to the underlying target type
of the _var. However, I can't do that unless I pass in an extra template
parameter (which, in turn, doesn't always work if I also want to use
STL standard binders and such...)

So, why not add a typedef for the target type to every _var type?

Resolution:
Revised Text:
Actions taken:
April 14, 2000: received issuue
April 14, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3563: Supporting typedefs for _var types? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
quite some time ago, we added the _var_type and _ptr_type definitions
to proxies to make it easier to write templates. Similarly, we have
the _whatever_seq typedefs for recursive structs and unions, to avoid
problems with anonymous types.

What's missing at the moment is a similar feature for _var types.
When I'm writing a template that does it's job in terms of _var types,
I also quite often want to do something to the underlying target type
of the _var. However, I can't do that unless I pass in an extra template
parameter (which, in turn, doesn't always work if I also want to use
STL standard binders and such...)

So, why not add a typedef for the target type to every _var type?

Resolution:
Revised Text:
Actions taken:
April 14, 2000: duplicate -- closed

Issue 3567: Any insertion for Boolean/Octet/Char (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
The mapping is currently a bit ambiguous about the insertion/extraction
operators for Any. It says:

	Assuming that boolean, char, and octet all map the C++ type
	unsigned char, the private and unimplemented operator<<= and
	operator>>= functions for unsigned char will cause a compile-time
	error if straight insertion or extraction of any of the
	boolean, char, or octet types is attempted.

This is ambiguous. It is not clear what is qualified by the first part
of the sentence "Assuming that...". It could qualify all of the paragraph,
in which case the interpretation is:

	Only on platform where these three types indeed map to the same
	C++ type will it be necessary to have these unimplemented operators.


	// C++ Octet
	oct = 040;
	Any any;
	any <<= oct; // this line will not compile
	any <<= Any::from_octet(oct); // but this one will

This is unambiguous, but it doesn't make it clear whether this will be
the case for all mapping implementations, or only those where the
IDL types map to ambiguous C++ types.

	It is important to note that the previous example is only one
	possible implementation for these helpers, not a mandated one.
	Other compliant implementations are possible, such as providing
	them via in-lined static any member functions if boolean, char,
	and octet are in fact mapped to distinct C++ types. All
	compliant C++ mapping implementations must provide these helpers,
	however, for purposes of portability.

Again, this is slightly ambiguous because, even though it requires the
presence of the helpers, it doesn't make any statement about whether the
prohibition of the direct insertion operators is mandatory for all
implementations.

I would suggest to clarify the text to state that direct insertion/extraction
of Bool, Octet, and Char must fail with a compile-time error, regardless
of how these types are mapped.

Resolution:
Revised Text:
Actions taken:
April 18, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3574: unclear semantics for valuetype insertion into Any (cxx_revision)

Click
here for this issue's archive.
Source: Cisco Systems (Mr. Paul Kyzivat, pkyzivat(at)cisco.com)
Nature: Uncategorized Issue
Severity:
Summary:
The semantics for insertion of a valuetype into an Any are unclear.
(Note, this is related to issue 2531 in the IDL-to-Java RTF.
It is also related to orb_revision issue 3205.)

In section 1.16.2 of ptc/2000-01-02, two forms of insertion are defined:
copying and non-copying. The non-copying form is described as:

"The noncopying valuetype insertion consumes the valuetype pointed to by the
pointer that T** points to. After insertion, the caller may not access the
valuetype instance pointed to by the pointer that T* points to. The caller
maintains ownership of the storage for the pointed-to-T* itself."

There is no specific description of the copying form specific to valuetypes,
so the generic description must apply:

"For the copying version of operator<<=, the lifetime of the value in the
any is independent of the lifetime of the value passed to operator<<=. The
implementation of the any may not store its value as a reference or pointer
to the value passed to operator<<=."

One possible interpretation (1) is that the copying form should be
implemented via a call to the _copy_value virtual function, while the
non-copying form should simply retain the provided pointer (without calling
_add_ref) and eventually call _remove_ref when done with it.

If so, what is the significance of the rule about the caller not continuing
to use the pointer? It it only that it has lost a reference count, and may
continue using the pointer if it has another reference count? Or does this
imply that continued access to the value is forbidden regardless of
reference count?

Another possible interpretation (2) is that the description is nonsense, and
that the non-copying form should use _add_ref and the copying form should
use _copy_value. In this interpretation the caller would be free to continue
using the original pointer and would be obligated to _remove_ref it
eventually. This seems like a more practical interpretation, but is
inconsistent with usage for other non-copying insertions.

Suggested Resolution:

Replace the paragraph on non-copying insertion of valuetypes (quoted above)
with:

"The noncopying valuetype insertion takes ownership of one reference count
to the valuetype pointed to by the pointer that T** points to. After
insertion, the caller should treat the pointer as if _remove_ref had been
called on it. The caller maintains ownership of the storage for the
pointed-to-T* itself."

"For copying valuetype insertion, the lifetime of the value in the any is
independent of the lifetime of the value provided. The implementation of the
any shall duplicate the value using the virtual function _copy_value or an
equivalent mechanism. The caller retains ownership of the T* pointer and
remains obliged to call _remove_ref on it."

Resolution:
Revised Text:
Actions taken:
April 20, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3603: unspecified criterion for Any extraction (cxx_revision)

Click
here for this issue's archive.
Source: Cisco Systems (Mr. Paul Kyzivat, pkyzivat(at)cisco.com)
Nature: Uncategorized Issue
Severity:
Summary:
The C++ language mapping does not specify what criterion should be used to
determine the validity of a typesafe extraction from an Any.

The closest it ever comes is the statement in 1.16.3: 
"In this case, the version of operator>>= for type Long must be able to
determine whether the Any truly does contain a value of type Long...".

There are two obvious candidates: the equal and equivalent operations of
TypeCode. 

Proposed resolution:

Replace the first sentence of 1.16.3:

	"To allow type-safe retrieval of a value from 
	an any, the mapping provides the following
	operators for each OMG IDL type T:"

with:

	To allow type-safe retrieval of a value
	from an Any, the mapping provides an
	operator>>= for each OMG IDL type T.
	Each such operator returns a boolean
	indicating success or failure, and if
	successful, makes the value of the any
	available via a user supplied argument.
	The success of the operation is determined
	by applying the {equal | equivalent}
	operation to the typecode of the any and
	the typecode of the target type.

	The exact form of operator>>= varies
	according to the type T as follows:

The choice of {equal | equivalent} needs to be discussed. I believe there
are valid arguments for each.

Resolution:
Revised Text:
Actions taken:
May 9, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3604: Any extraction widening to ValueBase (cxx_revision)

Click
here for this issue's archive.
Source: International Business Machines (Mr. Michael Cheng, nobody)
Nature: Uncategorized Issue
Severity:
Summary:
Currently there is Any extraction with widening to Object, and
AbstractBase.
It seems useful to also have one that widens to ValueBase.

Resolution: duplicate of issue 3092...closed
Revised Text:
Actions taken:
May 9, 2000: received issue
May 15, 2000: closed issue

Issue 3616: CORBA::Environment for EH compilers (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
Question: Is it legal to do the following if I use a C++ mapping that
	  uses C++ exceptions instead of using CORBA::Environment to
	  handle errors?

	  CORBA::Environment my_env;

The spec says (page 114):

	The C++-PIDL specification differs from the C-PIDL specification
	as follows:
	[...]
	Supports a default constructor that initializes it to hold no
	exception information.

However, the class definition that follows does *not* show the
default constructor.

So, the text disagrees with the class definition that is shown because
"supports a default constructor" does not have a "may" or "might", so
the text would appear to make the default constructor mandatory for
*both* EH and non-EH mappings.

Resolution:
Revised Text:
Actions taken:
May 16, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3673: CORBA::release and CORBA::is_nil on POA_ptr (cxx_revision)

Click
here for this issue's archive.
Source: Objective Interface Systems (Mr. Bill Beckwith, bill.beckwith(at)ois.com)
Nature: Uncategorized Issue
Severity:
Summary:
I believe that the CORBA::release and CORBA::is_nil
functions that take a POA_ptr argument do not
reference the proper scope:

1.41.11 release and is_nil
// C++
namespace CORBA {
...
	void release(POA_ptr);
...
	Boolean is_nil(POA_ptr);
...
}

Should be:

1.41.11 release and is_nil
// C++
namespace CORBA {
...
	void release(PortableServer::POA_ptr);
...
	Boolean is_nil(PortableServer::POA_ptr);
...
}

I don't see in the specification where the scope
of POA_ptr is explicitly defined.  But, I believe
that the correct definition of POA_ptr is in the
PortableServer namespace (i.e. the enclosing scope
of the POA class).

Then again I can't find anything in the specification
that asserts that any Foo_ptr type must go in the
immediately enclosing class or namespace containing
the Foo type.  :-/

Also, if POA_ptr is in PortableServer when an ORB is
mapping of modules to classes the definition of the
above release and is_nil functions in the CORBA class
will be impossible.

So I feel compelled to ask:

Do we really need to have release and is_nil functions
for types outside of the CORBA module?

Resolution:
Revised Text:
Actions taken:
June 7, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 3796: Missing conversion operator on String_var (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
Page 1-153, section 1.41.2:

String_var has:

	operator char*();
	operator const char*() const;

What is missing here is:

	operator char*&();

Without that, a String_var cannot be passed as an inout param.


Resolution: Add operator char*&() to class String_var.
Revised Text:
Actions taken:
August 31, 2000: received issue
October 3, 2001: closed issue

Issue 3797: Another issue with String_var (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
Why is it that String_var contains the following?

	operator char *();

The mapping never passes strings as a char *. The only parameter
passing signatures are const char * for in params, char * & for inout params,
and String_out for out params.

It seems that this operator is redundant?

The only reason I can think of for it having been added are sloppy signatures
(such as old implementations of strcpy or some such, which sometimes used
char * instead of const char *). However, wouldn't it be better to remove
operator char *() from String_var and force a cast for such broken function
signatures?

Resolution: Remove operator char*() from class String_var.
Revised Text:
Actions taken:
August 31, 2000: received issue
October 3, 2001: closed issue

Issue 3944: CORBA::Fixed needs a to_string() conversion function (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
CORBA::Fixed should have a to_string() member function to allow an
explicit conversion to a string.  Otherwise the only way to get a string
version of the information in a fixed is via a string stream, which can
be awkward.

namespace CORBA {
    class Fixed {
    public:
	...
	char *to_string();
	...
    };   
}

The caller of Fixed::to_string() must deallocate the return value by
calling CORBA::string_free or assigning it to a String_var.

Resolution:
Revised Text: Add to_string() to class Fixed: namespace CORBA { class Fixed { public: ... char * to_string() const; ... }; } to_string() converts a fixed value to a string. Leading zeros are dropped, but trailing frac-tional zeros are preserved. (For example, a fixed<4,2> with the value 1.1 is converted to "1.10".)The caller of Fixed::to_string() must deallocate the return value bycalling CORBA::string_free or assigning it to a String_var.
Actions taken:
October 10, 2000: received issue
October 3, 2001: closed issue

Issue 3966: _default_POA if no default ORB? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
what should _default_POA() return if the default ORB was never initialized?
The spec doesn't say...

Resolution:
Revised Text:
Actions taken:
October 17, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 4002: CORBA::RequestSeq or CORBA::ORB::RequestSeq? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
with 2.3, we got rid of all the C/C++ pseudo code for the DII and replaced
it with IDL. Unfortunately, this has broken something in the C++ mapping...

In the 2.0 spec, we had:

	pseudo interface ORB {
		typedef sequence<Request> RequestSeq;
		// ...
	};

With 2.3, we changed this to:

	module CORBA {
		// ...
		typedef sequence<Request> RequestSeq;
		// ...
	};

Unfortunately, the C++ mapping still shows the (now incorrect) definition
from CORBA 2.0 in Section 1.33.1.

In addition, the C++ mapping shows in Section 1.33.2:

	class ORB {
	public:
		class RequestSeq {...};
		// ...
	};

But then, in Section 1.41.21:

	class ORB {
	public:
		typedef sequence<Request_ptr> RequestSeq;
		// ...
	};

The latter definition isn't C++...

So, we have several issues here:

	1) How can we fix the C++ mapping to be in line with the core?

	   I'm toying with the idea of saying that RequestSeq is defined
	   in the CORBA namespace, with a typedef for backward compatibility
	   in the ORB interface. But I'm not sure what will break with
	   this kind of aliasing (repository IDs might change unexpectedly?)

	2) Section 1.41.21 should be changed to show legal C++.

	3) Depending on the resolution to this issue, both 1.33.2 and
	   1.41.21 will probably need updating to reflect the resolution.

Resolution:
Revised Text:
Actions taken:
October 27, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 4114: Requiring ref counting in ServantBase (cxx_revision)

Click
here for this issue's archive.
Source: Objective Interface Systems (Mr. Bill Beckwith, bill.beckwith(at)ois.com)
Nature: Uncategorized Issue
Severity:
Summary:
The current requirement that the default implementations of _add_ref
and _remove_ref in ServantBase do nothing creates several problems:

   1. The text in the C++ mapping that states that _remove_ref
      must be called on a servant means nothing unless the ref
      counting mix-in was used by the servant author.

   2. The intended semantics of _var types as "smart pointers"
      is upheld only if the servant author goes to the extra
      step of using the ref counting mix-in.

   3. In many places the C++ mapping explicitly or implicitly
      states that _var types will recover memory for the application
      developer:

         1.3.1:

             Client code frequently will use the object reference
             variable type (A_var) because a variable will
             automatically release its object reference when it is
             deallocated or when assigned a new object reference.

         1.3.6:

             When a _var is passed as an out parameter, any
             previous value it refers to must be implicitly
             released.

      In addition, there are many places in the C++ mapping where
      the specification of _var types for arrays, structs, strings,
      sequences, type Any, type codes, value types, value boxes,
      value factories, etc. guarantees that the memory will be
      reclaimed when the _var goes out of scope.  This makes it
      easy for users to believe that all _var types will release
      storage for the objects that point to.

Benefits of Proposed Resolution:

    Users can depend on ORB's to manage servant memory by default
    rather than by exception.

    Specification text that promises or implies automatic memory
    reclamation need not change.

    Existing user code will still compile.


Resolution:
Revised Text:

Replace the text in section 1.36.1 beginning with the sentence:

      Servant instances may implement reference counting to prevent
      themselves from being destroyed while the application is
      still using them.

and section 1.36.2 in its entirety with:

Servant instances may implement reference counting to prevent
themselves from being destroyed while the application is still
using them. Servant reference counting is performed using the
_add_ref and _remove_ref functions declared in ServantBase. The
default implementations of _add_ref and _remove_ref supplied by
ServantBase provide true reference counting. An instance of a
servant class derived from ServantBase initially has a reference
count of one.  Invoking _add_ref on the servant instance
increases its reference count by one.  Invoking _remove_ref on
the servant instance decreases its reference count by one; if the
resulting reference count equals zero, _remove_ref invokes delete
on its this pointer in order to destroy the servant. For ORBs
that operate in multi-threaded environments, the implementations
of _add_ref and _remove_ref that the ServantBase class provides
shall be thread-safe.

ServantBase supports copy construction and the default assignment
operation.  Copy construction always sets the reference count of
the new servant instance to one. The default assignment
implementation merely returns *this and does not affect the
reference count.

For servants that require that servants are not reference
counted, these functions are virtual and thus may be overridden
by derived servant classes. A default mix-in class is also
provided to remove the reference counting in the PortableServer
namespace; please see Section 1.36.2, "Servant No Reference
Counting Mix-In," on page 1-??? for more details.  Details
concerning POA and application responsibilities with respect to
reference counting can be found in Section 1.36.4, "Servant
Memory Management Considerations," on page 1-???.

Note that for applications that depended on the the
RefCountServantBase provided in previous revisions of this
specification ORBs must provide a default implementation of this
mix-in class in the PortableServer namespace that essentially
does nothing:

// C++
namespace PortableServer
{
      class RefCountServantBase : public virtual ServantBase
      {
      public:
         ~RefCountServantBase();
      protected:
         RefCountServantBase(const RefCountServantBase&);
         RefCountServantBase& operator=(const RefCountServantBase&);
      private:
         // ...other implementation details...
      };

}

1.36.2 Servant No Reference Counting Mix-In

The PortableServer namespace also provides a standard servant
mix-in class to remove the reference counting:

// C++
namespace PortableServer
{
      class NoRefCountServantBase : public virtual ServantBase
      {
      public:
         ~NoRefCountServantBase();
         virtual void _add_ref() {}
         virtual void _remove_ref() {}
      protected:
         NoRefCountServantBase() {}
         NoRefCountServantBase(const NoRefCountServantBase&) {}
         NoRefCountServantBase& operator=(const NoRefCountServantBase&);
      private:
         // ...other implementation details...
      };
}

The NoRefCountServantBase mix-in class overrides the inherited
_add_ref and _remove_ref functions it inherits from ServantBase,
in order to override and remove the default reference counting in
ServantBase.

Resolution: see below
Revised Text: This resolution addresses issue 4114 as well as 2441. Section 1.36.1 Change the implementation of Servant to use real reference counting, by adding the implementation shown for RefCountServantBase in section 1.36.2 to the code in section 1.36.1. (This requires addition of the _ref_count member and changing the constructor and copy constructor to initialize _ref_count to 1.) Add a new virtual function: ULong _refcount_value(); Page 1-131 Change the text beginning with “Servant instances may implement reference counting...” and continues to the end of section 1.36.1 with the following text: Servant instances implement reference counting to prevent themselves from being destroyed while the application is still using them. The con-structor and copy constructor initialize the _ref_count member to one. The assignment operator returns *this and does not affect the reference count. _refcount_value returns the current value of the _ref_count mem-ber. _add_ref increments the _ref_count member by one. _remove_ref decrements the _ref_count member by one; if the resulting reference count equals zero, _remove_ref invokes delete on its this pointer in order to destroy the servant. For ORBs that operate in multi-threaded environ-ments, the implementations of _refcount_value, _add_ref, and _remove_ref shall be thread-safe. // C++ void PortableServer::ServantBase::_add_ref() { ++_ref_count; } void PortableServer::ServantBase::_remove_ref() { if (--_ref_count == 0) delete this; } ULong PortableServer::ServantBase::_refcount_value() { return _ref_count; } Servants can be allocated on the stack even though they are reference-counted: because the constructor sets the initial reference count to one, and the ORB makes an equal number of calls to _add_ref and _remove_ref, when the servant is popped off the stack, the destructor sim-ply destroys a servant with a reference count of one (that is, the reference count never drops to zero). Reference counting can be disabled completely by providing no-op implementations of _add_ref and _remove_ref in the derived servant implementation. Change section 1.36.2 to read: The PortableServer namespace provides a RefCountServantBase class. This class exists for backward compatibility reasons; its use is deprecated and the class will be removed in a future revision of the C++ mapping. The RefCountServantBase class is defined as follows: // C++ namespace PortableServer { struct RefCountServantBase {}; } Renumber 1.36.2 as 1.36.3. The new 1.36.2 becomes what’s currently 1.36.4. That creates a more logical order because the reference counting semantics are explained immediately following ServantBase, instead of being separated by the mix-in class and the ServantBase_var class. The new order of sections now is: 1.36.1 Mapping of PortableServer::Servant 1.36.2 Servant Memory Management Considerations 1.36.3 Servant Refererence Counting Mix-In 1.36.4 ServantBase_var Class Change section “Servant Memory Management Considerations as follows: - Delete the last sentence of the introductory para: This specification supports but does not require reference counting. - Delete the first sentence of the first bullet: When reference counting is used, the implementation of _remove_ref is assumed to delete the servant when its reference count drops to zero. - Delete the beginning of the second bullet: If reference counting is not used, some application code must explicitly call delete on a heap-allocated servant for that servant’s memory to be reclaimed. - Change the second bullet list as follows: - 2nd bullet (ServantActivator::etherealize), change to read: ServantActivator::etherealize--has an in Servant argument. The POA assumes that etherealize consumes the Servant argument, and does not access a Servant in any way after it has been passed to etherealize. A con-forming implementation of etherealize may invoke _remove_ref on the servant. - 4th bullet (ServantLocator::postinvoke), change to read: ServantLocator::postinvoke - has an in Servant argument. The POA assumes that postinvoke consumes the Servant argument, and does not access a Servant in any way after it has been passed to postinvoke. A con-forming implementation of postinvoke may invoke _remove_ref on the Servant. - 5th bullet (POA::get_servant): Delete “If the application uses reference counting”. Delete “A conforming caller need not invoke _remove_ref on the returned Servant if the type of the Servant uses the default reference counting inherited from ServantBase.” - 12th bullet (POA::reference_to_servant): Delete “If the application uses reference counting”. Delete “A conforming caller need not invoke _remove_ref on the returned Servant if the type of the Servant uses the default reference counting inherited from ServantBase.” - 13th bullet (POA::id_to_servant): Delete “If the application uses reference counting”. Delete “A conforming caller need not invoke _remove_ref on the returned Servant if the type of the Servant uses the default reference counting inherited from ServantBase.”
Actions taken:
April 6, 2000: received issue
March 18, 2001: received issue
May 13, 2002: closed issue

Issue 4119: questions to IDL - C++ mapping ( CORBA 2.3, valuebox) (cxx_revision)

Click
here for this issue's archive.
Source: Fraunhofer FOKUS (Dorota Witaszek, nobody)
Nature: Uncategorized Issue
Severity:
Summary:
I have the following questions to IDL - C++ mapping CORBA 2.3 (concerning valueboxes).
Can somebody give me an answer?


1. I assume that valueboxes T as a special kind of valuetypes also
need in C++ the T_var and the T_out types and the T_out types will be
used in function signatures for IDL out-parameters. Is it true?

2. The mapping for strings and wstrings requires a definition of C++
operators << and >> to allow a use of strings (wstrings) with the c++ iostreams.
What about valueboxes of strings (wstrings) - chapter 1.17.7.4?
Is it required to define (in C++)  the operators <<, >> to use T_var and T_out
with C++ iostreams, where T is a type for a valuebox T of string (wstring)?

Resolution:
Revised Text:
Actions taken:
November 14, 2000: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 4144: ORB::destroy() missing (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
The June 99 version of the C++ mapping doesn't mention ORB::destroy().
It should.

Resolution:
Revised Text:
Actions taken:
January 11, 2001: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 4150: Optional parameters for _create_request? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
On page 1-119, the spec says the following about _create_request() and
_create_request2():

	[...] the ORB requires:

		- a target object reference
		- an operation name
		- a list of arguments (optional)
				      ^^^^^^^^^^
		- a place to put the result (optional)
					    ^^^^^^^^^^
		- a place to put any returned exceptions
		- a Context (optional)
			    ^^^^^^^^^^
		- a list of the user-defined exceptions that can be
		  thrown (optional)
			^^^^^^^^^^
		- a list of Context strings that must be sent with the
		  operation (optional)
			    ^^^^^^^^^^

Note all the "optional" remarks.

It's not clear what "optional" actually means. We have two cases for
these parameters:

	- Arguments, user exceptions, and IDL contexts are *sequences*.

	- Result and context are object references.

Two questions:

	- What does it mean for a sequence parameter to be "optional"?
	  That I can pass a null pointer or that I can pass an empty
	  sequence? I assume that an empty sequence is meant, but the spec
	  doesn't say that.

	- What does it mean for a reference parameter to be "optional"?
	  That I can pass a nil reference or that I must pass a reference
	  to some dummy object that indicates that the value really isn't
	  there?

	  Where this is particularly annoying is for the return value. (The
	  "result" parameter to _create_request()):

	  - If I can pass a nil reference, no problem. This could
	    be interpreted to mean the same thing as a void
	    return type.

	  - If I can't pass a nil reference, what should I pass?
	    Obviously, it would have to be a reference to a valid
	    NamedValue object. But how do I create that NamedValue
	    object?

	    I can call ORB::create_named_value(), but what should
	    I do then?

		  CORBA::NamedValue_var result;
		  orb->create_named_value(result);

	    At this point, I have a NamedValue containing an Any with
	    tk_null (because that's what the Any default constructor
	    creates). However, to correctly indicate that the operation
	    I want to call has a void return type, I have to make a
	    NamedValue that contains an Any with tk_void. But, how do
	    I achieve that? I can't use one of the Any inserters to
	    turn the TypeCode in the Any into tk_void, and I can't
	    use the type() member of the Any because I can't change the
	    type of an Any if it isn't consistent with the TypeCode that's
	    already there...

	    Even worse, the NamedValue doesn't seem to make sense as
	    the return value at all. For one, it has a name attribute.

	    - What is the value of that name for a return value?

	    - How would I set that string after having create the NamedValue
	      by calling create_named_value()?
	
	    - What is the value of that string once I have called
	      create_named_value()?

	    Second, the NamedValue contains a flags attribute.

	    - What is the value of that flags attribute for a return value?
	      None of ARG_IN, ARG_INOUT, or ARG_OUT make sense. (One could
	      argue that ARG_OUT could be used, but I think that sucks...)
	
	    - How would I set that flag on the NamedValue I have just created?
	      The mapping for NamedValue only offers accessor but no
	      modifiers, so I can't set the value of the flag.

	    - What is the value of the flag once I have called
	      create_named_value()?

It seems that the easiest way to fix the problem is to state that, if a
parameter isn't needed, this is indicated by an empty sequence for lists,
and by a nil reference for objects.

However, the problems around create_named_value() and appear to be more
serious. How should we fix those?

Resolution:
Revised Text:
Actions taken:
January 16, 2001: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 4151: Passing two context lists to _create_request() (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
The second version of _create_request() accepts two context lists:

	void Object::_create_request(
		Context_ptr		ctx,		// <===
		const char *		operation,
		NVList_ptr		arg_list,
		NamedValue_ptr		result,
		ExceptionList_ptr,
		ContextList_ptr,			// <===
		Request_out		request,
		Flags			req_flags
	     );

The spec then says:

	The ContextList differs from the Context in that the former supplies
	only the context strings whose values are to be looked up and sent
	with the request invocation (if applicable), while the latter
	is where those values are obtained.

So, I *think* (but I'm not sure), this means to say that:

	- The Context parameter points at a tree of context objects.

	- The ContextList pointer points at an object that contains
	  a sequence of strings.

	- The ContextList determines which context values are to be
	  picked out of the tree pointed at by the Context parameter and
	  to be sent with the invocation.

If that is the intended interpretation, it's very difficult to discern
from the words in the spec now. I think this needs clarification.

Questions:

	- What happens if the ContextList contains the name of a context
	  variable that isn't available in the context tree?

	- What happens if I have a non-empty context list but a nil
	  context tree?

Also, looking at the ContextList interface:

	pseudo interface ContextList {
		readonly attribute unsigned long count;
		void add(in string ctxt);
		string item(in unsigned long index) raises(Bounds);
		void remove(in unsigned long index) raises(Bounds);
	};

There is no further documentation on this. Some questions:

	- As far as I can see, this interface is meant to maintain a
	  simple sequence of strings. So, why not simply use a string
	  sequence?

	- At what position does add() add the item? Presumably at the tail,
	  but that isn't stated.

	- How can I replace the value of string at a certain position?
	  It looks like I can't do that at all because there is no
	  random-access modifier.

This seems insanely complex.

Suggestion: We should

	- add words to make it clear how the context parameters work

	- consider overloading _create_request() yet again to use
	  an ordinary string sequence
	
	- deprecate the ContextList pseudo interface

Or, we could drop support for IDL context altogether (but I suspect we
can't get away with that ;-)

Resolution:
Revised Text:
Actions taken:
January 16, 2001: received issue

Issue 4153: _name & _rep_id pure virtual? (cxx_revision)

Click
here for this issue's archive.
Source: IONA (Mr. Matthew Newhook, )
Nature: Uncategorized Issue
Severity:
Summary:
 The definition for Exception in the current spec is:

// C++
class Exception
{
public:
    virtual ~Exception();
    virtual void _raise() const = 0;
    virtual const char * _name() const;
    virtual const char * _rep_id() const;
};

Why aren't _rep_id() and _name() pure virtual?

Resolution: rejected
Revised Text:
Actions taken:
January 16, 2001: received issue
October 3, 2001: closed issue

Discussion:
Rationale for Rejection
Making these operations pure virtual would make things harder for implementations that
share the code for both user and system exceptions.


Issue 4157: publication of messaging / unchecked_narrow (cxx_revision)

Click
here for this issue's archive.
Source: UBS (Mr. Hans Kneubuehl, hans.kneubuehl(at)ubs.com)
Nature: Uncategorized Issue
Severity:
Summary:
Incorporate Messaging changes relevant to the C++ mapping, as shown in
orbos/98-05-05 pages 115 and 116 together with any changes made to them
by the Messaging RTF, into the IDL-C++ mapping chapter.

Resolution:
Revised Text:
Actions taken:
January 19, 2001: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 4160: mapping of local interfaces (cxx_revision)

Click
here for this issue's archive.
Source: AdNovum Informatik (Mr. Stefan Wengi, nobody)
Nature: Uncategorized Issue
Severity:
Summary:
I took a closer look at orbos/99-07-01 to see how I'd have to implement
local objects.
Several questions came to my mind:

1)
what happens if you invoke CORBA::Object::_duplicate on a LocalObject?

- does it call _add_ref on the local object (as the spec seems to say in
4.1.2)?
- is it allowed to return a copy of the object?

2)
how is memory handling done on existing interfaces?

4.1.5 defines a list of interfaces that are changed to local interfaces
e.g. CORBA::Current. How are they supposed to support proper memory
handling when the default implementations of _add_ref/_remove_ref do
nothing?

3)
local interfaces can be implemented by the application programmer, e.g.
PortableInterceptors.

- what happens if my _duplicate operation on CORBA::Object creates a
copy (which is legal) and my implemenation of the local interface
contains some state?


This mapping creates more problems than it solves.
It breaks at least one of the basic rules of OO design: base classes
must not know about subclasses.
Also disabling some methods that are valid on CORBA::Object (e.g. is_a)
is a hint for bad design.
Why not take the same interface 'inheritance' approach as with value
types?

Resolution: see above
Revised Text: Replace 1.35 with the following: 1.35 Local Object The C++ mapping of Local Object is a class derived from CORBA::Object that is used as a base class for locality constrained object implementations. A locality constrained object is implemented by a class derived both from the class mapping the interface and from CORBA::LocalObject. namespace CORBA { class LocalObject : public virtual Object { public: virtual void _add_ref(); virtual void _remove_ref(); virtual ULong _refcount_value() const; // ...other pseudo ops not shown... protected: LocalObject(); ~LocalObject(); }; }; Member functions and any data members needed to implement the Object pseudo-operations and any other ORB support functions shall also be supplied but are not shown. The IDL compiler will generate appropriate conversion operations to allow a pointer to a local object implementation to be automatically converted to the corresponding _ptr or _var type. Local object instances implement reference counting to prevent themselves from being destroyed while the application is still using them. The constructor and copy constructor initialize the reference count member to one. The assignment operator returns *this and does not affect the reference count. _refcount_value returns the current value of the reference count member. _add_ref increments the reference count member by one. _remove_ref decrements the reference count member by one; if the resulting reference count equals ezero, _remove_ref invokes delete on its this pointer in order to destroy the local object. For ORBs that operate in multi-threaded environments, the implementations of _refcount_value, _add_ref, and _remove_ref shall be thread-safe. Local objects can be allocated on the stack even though they are reference-counted: because the constructor sets the initial reference count to one, and the program makes an equal number of calls to _add_ref and _remove_ref, when the local object is popped off the stack, the destructor simply destroys a local object with a reference count of one (that is, the reference count never drops to zero). Note that reference counting can be disabled completely by providing no-op implementations of _add_ref and _remove_ref in the derived local object implementation. Here is an example of how to implement a local interface: // IDL local interface LocalIF { void an_op(in long an_arg); }; // C++ class MyLocalIF : public LocalIF, public CORBA::LocalObject { public: MyLocalIF(...); ~MyLocalIF(); void an_op(CORBA::Long an_arg); };
Actions taken:
January 18, 2001: received issue
July 1, 2003: closed issue

Discussion:
- Require the IDL compiler to generate if necessary conversion functions that transparently convert pointers to local objects to _ptrs. 
- We do not introduce any special mapping for interfaces that  used to be non-local such as the ServantManagers; older code that implemented them using servants will have to be updated. 
- The ref-counting text was borrowed from the POA ServantBase


Issue 4166: Need for TIE template for skeletons for valuetypes that support (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The third bullet of 1.17.9 states that a POA skeleton class is generated
for valuetypes that support interfaces, but is silent about whether a
_tie template is also generated.

Proposal:

Add the following to the end of the third bullet in 1.17.9:

"No tie skeleton class is generated for the valuetype because the tie
for the inherited class can be used instead."

Resolution: duplicate of issue 3328 close issue
Revised Text:
Actions taken:
January 20, 2001: received issue
October 3, 2001: closed issue

Issue 4172: LocalObject (cxx_revision)

Click
here for this issue's archive.
Source: IONA (Mr. Matthew Newhook, )
Nature: Uncategorized Issue
Severity:
Summary:
From orbos/99-07-01 (is there a more up-to-date version with the C++
 mapping?)

---

namespace CORBA
{
    class LocalObject
    : public virtual Object
    {
    protected:
	LocalObject();
	~LocalObject();
    public:
	virtual void _add_ref();
	virtual void _remove_ref();
	// pseudo operations not shown...
    };
};

Member functions and any data members needed to implement the Object
pseudo-operations and any other ORB support functions must also be
supplied but are not shown.

_add_ref

The _add_ref member function is called when the reference is duplicated.
A default implementation is provided that does nothing. A derived
implementation may use this operation to maintain a reference count.

_remove_ref

The _remove_ref member function is called when the reference is
released. A default implementation is provided that does nothing. A
derived implementation may use this operation to maintain a reference
count, and delete the object when the count becomes zero.

---

This implies that by default a LocalObject will not be reference
counted. That seems counter-intuitive.  What was the intention here? It
seems that every application I can think of will want reference counted
local objects -- however, to get this at present the application developer
either has to implement the reference counting themselves or inherit
off some proprietary interface.

Resolution: same as issue #4160
Revised Text:
Actions taken:
January 23, 2001: received issue
July 1, 2003: closed issue

Issue 4186: CORBA::Object & LocalObject (cxx_revision)

Click
here for this issue's archive.
Source: IONA (Mr. Matthew Newhook, )
Nature: Uncategorized Issue
Severity:
Summary:
Is the definition of CORBA::Object given the C++ specificaton intended
   to be normative? If so then the C++ mapping given in the components
   spec won't work since it's clear that LocalObject is supposed to
   override the various methods provided on CORBA::Object.

Resolution: same as issue #4160
Revised Text:
Actions taken:
January 24, 2001: received issue
July 1, 2003: closed issue

Issue 4199: Inserters/extractors for boxed strings? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
Given

	valuetype WStringValue wstring;

is there any requirement to have stream inserters and extractors for the
boxed value type itself? The spec is currently silent on this issue.

Should the following work?

	WStringValue ws;
	cin >> ws;
	cout << ws;

Resolution:
Revised Text:
Actions taken:
February 12, 2001: eceived issue

Discussion:
deferred in June 2011 to the next RTF


Issue 4210: Non-exception neutral code in C++ mapping. (cxx_revision)

Click
here for this issue's archive.
Source: University of California, Irvine (Mr. Carlos O'Ryan, nobody)
Nature: Uncategorized Issue
Severity:
Summary:
formal/99-07-41 in section 1.36.3 includes the following code:

---------------- cut here ----------------
class ServantBase_var {
public:

  ~ServantBase_var ()
  {
    if (_ptr != 0) _ptr->_remove_ref ();
  }

  ServantBase_var& operator=(ServantBase* p)
  {
    if (_ptr != 0) _ptr->_remove_ref ();
   _ptr = p;
   return *this;
  }

  ServantBase*& out()
  {
    if (_ptr != 0) _ptr->_remove_ref ();
    _ptr = 0;
    return _ptr;
  }
};
---------------- cut here ----------------

      unfortunately this code is not exception safe:  if
_remove_ref() throws the class is left in an inconsistent state (for
out() and operator=).  The fact that the destructor can potentially
throw exceptions makes it extremely hard for application developers to
write exception safe classes.
      A better implementation could be:

---------------- cut here ----------------
class ServanBase_var
{
  ServantBase_var& operator=(ServantBase* p)
  {
    if (p == _ptr) return *this;

    ServanBase_var tmp (p);
    std::swap (p._ptr, p);
    return *this;
  }

  ServantBase*& out()
  {
    if (_ptr != 0) _ptr->_remove_ref ();
    _ptr = 0;
    return _ptr;
  }
};
---------------- cut here ----------------

	The implementation above also prevents silly mistakes like:

ServantBase_var foo = ...;
foo = foo.in ();

	The destructor is a little trickier:

---------------- cut here ----------------
ServantBase_var::~ServantBase_var ()
{
  // do not propagate exceptions out of the destructor
  try {
    if (_ptr != 0) _ptr->_remove_ref ();
  }
  catch (...)
  {
  }
}
---------------- cut here ----------------

	Event better would be to add some throw spec to _remove_ref()
and _add_ref().  The spec is, as far as I can tell, silent in this
respect, thus those operations can throw anything.  This is
unfortunate because it makes it harder to write exception-safe code,
both for application developers and ORB implementors alike.

Resolution: see below
Revised Text: See also the resolution for 2445; the two issues affect the same section of text. Change the example implementation in “ServantBase_var Class” as follows: - Add the following to the protected section of ServantBase_var: // If STL is available, std::swap can be used // instead of this helper function. void swap(ServantBase *lhs, ServantBase *rhs) { ServantBase *tmp = lhs; lhs = rhs; rhs = tmp; } - Change the destructor to read: ~ServantBase_var() { if (_ptr != 0) { try { _ptr->_remove_ref(); } catch (...) { // swallow exceptions } } } - Change the two assignment operators to read: ServantBase_var& operator=(ServantBase* p) { if (_ptr != p) { ServantBase_var tmp = p; swap(_ptr, p); } return *this; } ServantBase_var& operator=(consServantBase_var& b) { if (_ptr != b._ptr) { ServantBase_var tmp = b; swap(_ptr, b._ptr); } return *this; } - Change the out() implementation to read: ServantBase*& out() { if (_ptr != 0) { ServantBase_var tmp; swap(_ptr, tmp._ptr); } return _ptr; }
Actions taken:
February 20, 2001: received issue
May 13, 2002: closed issue

Issue 4243: Backward compatibility with C (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
the spec talks about backward compatibility with the C mapping in a number
of places:

	- 1.1.14
	- at the beginning of 1.7
	- in the footnote on page 1-29
	- at the end of 1.10
	- at the end of 1.12
	- at the beginning of 1.13.3
	- at the end of 1.16.10
	- at the end of 1.20
	- at the end of 1.23
	- at the beginning of 1.26
	- 1.31.3
	- 1.42.1

Binary compatibility with the C mapping has never existed and never will.

Proposal: Remove all mention of the C mapping from the above places.

Resolution: Remove all mention of the C mapping from the above places.
Revised Text:
Actions taken:
March 30, 2001: received issue
October 3, 2001: closed issue

Issue 4244: Remnant of read-only return values and out params (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
About two or three years ago, we decided to deprecate the read-only
nature of in params on the server side, and out params and return values
on the client side.

The second-last para of 1.13.2 still contains a remnant that we forgot
to clean up back then:

	As with other out and return values, out and return sequences must
	not be assigned to by the caller without first copying them.

I would suggest to modify this sentence to read:

	For a sequence passed to an operation as an in parameter, the
	operation must not assign to the sequence if its release flag
	is false and the sequence has variable-length elements.

	For a sequence passed to a client as an out parameter or return
	value, the client must not assign to the sequence if its
	release flag is false and the sequence has variable-length elements.

This captures more correctly the intent and the semantics of the release
flag (because assigning to a sequence with the release flag set to true
is perfectly OK).

Resolution: see below
Revised Text: For a sequence passed to an operation as an in parameter, the operation must not assign to the sequence if its release flag is false and the sequence has variable-length elements. For a sequence passed to a client as an out parameter or return value, the client must not assign to the sequence if its release flag is false and the sequence has variable-length elements. In table 1-6, section 1.22.1, remove the restriction on modifying return out parameters and return values from case 3 and case 6.
Actions taken:
March 30, 2001: received issue
October 3, 2001: closed issue

Issue 4245: How to create a local object reference? (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The text added by the CCM spec that describes LocalObject has no
information on how to portably create a local object reference.  Since
we have ORB services, like the Security or Transaction service which
must create local object references, and since we have a goal that these
services should be portable as source code between ORBs, we need a
portable way to create a local object reference.

Proposal:

Add a static _create_reference() member function to local object
interface classes:

// IDL
local interface I { ... };

// C++

... I_ptr;

class I : ... {
public:
    I_ptr _create_reference(I *);    
};

A programmer can then create a new local object reference portably:

    class MyI : public I, public CORBA::LocalObject {
	...
    };

    I_var	new_i = I::_create_reference(new MyI());

Resolution: same as issue #4160
Revised Text:
Actions taken:
March 30, 2001: received issue
July 1, 2003: closed issue

Issue 4265: Server-side exception specifications and ISO C++ std::exception (cxx_revision)

Click
here for this issue's archive.
Source: ZeroC (Mr. Bernard Normier, bernard(at)zeroc.com)
Nature: Uncategorized Issue
Severity:
Summary:
In CORBA C++ 2.4 and before, the exception specification of generated 
POA skeleton member functions is CORBA::SystemException plus the mapped C++ 
class for exceptions specified in the raise expression of the corresponding 
IDL operation [see CORBA C++ 2.4 paragraph 23.27].
As a result, a servant programmer needs to convert any exception other than
those in the exception specification to one in the exception specification
-- else the C++ runtime will call std::unexpected() if an unexpected
exception is thrown.

This makes exception handling on the server-side quite painful: 
for example if a servant programmer calls operator new(), s/he's supposed 
to catch std::bad_alloc and convert it to CORBA::NO_MEMORY. Similarly, 
if s/he uses any of the ISO C++ libraries, s/he's supposed to convert the 
std::exception objects raised by the library into CORBA::SystemExceptions,
or user-defined IDL exceptions.

Given that C++ compilers provide more and more features of ISO C++,
in particular the standard libraries, this is a real world issue!

Proposal
========

Add std::exception in the exception specification of generated 
POA-skeleton member functions. The POA (or POA skeleton) implementation 
is responsible to perform the following conversions:
std::bad_alloc        to CORBA::NO_MEMORY
other std::exception  to CORBA::UNKNOWN (see 3.17.1.1 in CORBA 2.3 core)


Source-code backward-compatibility
----------------------------------
I propose to make exception specifications in generated skeletons a bit
less restrictive than they were in CORBA C++ 2.4 (and before).
C++ servants written with the CORBA C++ 2.4 (and before) mapping do not
require any change -- their exception specifications will be more
restrictive than required by the new mapping, which is perfectly correct.

Interoperability
----------------
It does not affect interoperability: only CORBA exceptions go on the
wire. An ORB-mediated operation can only raise a CORBA::SystemException
or a user-defined IDL exception.

Alternative Mapping for C++ Dialects
------------------------------------
Unfortunately, not all C++ compilers comply (or almost comply) with
ISO C++. With such a "C++ compiler", the ORB/POA implementation will
behave as in CORBA C++ 2.4 (i.e. no std::exception is the exception
specification). Or maybe we can allow the ORB/POA to add an
implementation-dependent class in the generated exception 
specifications?

*Portable* user-written servants will simply include 
CORBA::SystemException (or something more restrictive) in their 
exception specifications.

Resolution: see below
Revised Text: Page 1-85: Delete the exception specifications from the code example. Delete the paragraph following the code example. Page 101: Change the para preceding the code example to read: Operation and attribute signatures do not have exception specifications. Page 1-130: Delete the exception specifications from the code example. Page 1-139 Delete the exception specifications from the two code examples. Page 1-142 Delete the exception specifications from the code example (two occur-rences). Page 1-144 Delete the exception specification from both code examples. Delete the phrase “and the ability to throw CORBA system exceptions” from the first sentence following the first code example. Page 1-145 Change the first para of 1.37 to read: The signature of an implementation member function is the mapped sig-nature of the OMG IDL operation. For example: Delete the exception specification from the code example. Delete the para following the code example. Page 1-146 Delete the exception specifications from the first code example.
Actions taken:
April 11, 2001: received issue
May 13, 2002: closed issue

Issue 4270: semantics of valuetype _downcast operation unclear (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The definition of the _downcast operation generated for valuetypes is
unclear about whether it increments the reference count of the valuetype
before returning the downcasted pointer.  I assume by the fact that it
is called _downcast rather than _narrow that it should not increment the
reference count.

Proposal:

Add the following text to the end of the last paragraph in 1.17.3:

"The _downcast function does not increment the reference count of the
valuetype."

Resolution: Add the proposed text
Revised Text: Add the following text to the end of the last paragraph in 1.17.3: "The _downcast function does not increment the reference count of the valuetype."
Actions taken:
April 13, 2001: received issue
July 1, 2003: closed issue

Issue 4274: There is an incorrect page reference (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity: Minor
Summary:
Details: This section (entitled 1.16.10 The Any Class) refers the reader to the full definition of the Any class. However, it provides the page number and section heading of itself -- it is self referential. 

Suggested Correction: The reference should refer to the section on page 1-150 (entitled 1.41.5 The Any Class) 

Resolution: see below
Revised Text: Update stale cross reference to point at seciont 1.41.5.
Actions taken:
April 17, 2001: received issue
May 13, 2002: closed issue

Issue 4288: ServantBase needs _get_domain_managers()? (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
The Object::get_domain_managers() operation is a transmissible operation
with CORBA 2.3.  Does ServantBase need anything added to handle this or
is this managed internally by the ORB/POA?

Resolution:
Revised Text:
Actions taken:
April 29, 2001: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 4325: Deprecated Ref identifier (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
In the first para of section 1.3.1, we still have a sentence about
the deprecated Ref names for object references. Those have been deprecated
for a *long* time now.

Proposal:

	Remove the sentence beginning with "For historical reasons, the
	type ARef..."

Resolution: see below
Revised Text: Section 1.3.1, first para, delete the following sentence: For historical reasons, the type ARef is defined as a synonym for A_ptr, but usage of the Ref names is not portable and is thus deprecated.
Actions taken:
May 29, 2001: received issue
May 13, 2002: closed issue

Issue 4340: Structure member ordering (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
The C++ mapping says in section 1.10:

	An OMG IDL struct maps to C++ struct, with each OMG IDL struct
	member mapped to a corresponding member of the C++ struct.

This doesn't say that the order of the struct members in C++ must be the
same as in the IDL. Without that guarantee, code that compares pointers to
members is non-portable. We need a requirement to preserve the order here.

Resolution: see below
Revised Text: Insert the following sentence as the second sentence of the first para of 1.10: The C++ structure members appear in the same order as the correspond-ing IDL structure members.
Actions taken:
June 6, 2001: received issue
April 26, 2010: closed issue
April 26, 2010: closed issue

Issue 4344: Typedefs for struct members? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
I recently got a query from a customer. Basically, they have a CORBA system
that interfaces to some legacy library. Lots of structures are being passed
back and forth, many of which contain strings; these need to be passed
as char * or as std::string, depending on where they go.

So, the customer defined conversion functions that correctly copied a
std::string or char * into and out of a string member (using string_dup()
or whatever, as appropriate). The problem is that they have to use
an undefined type name as the type of the parameter. For example:

	void copy(const std::string & from, CORBA::string_mgr & to);

Of course, "string_mgr" is a mapping-internal type name and therefore the
code is non-portable.

I don't see an easy work-around that would be within the current mapping.
I could use a function that accepts a reference to a struct instead of
the string inside the struct, but that then means that I need a different
function for each structure type. Or I can write macros that are specific
to each ORB to handle it (but that is truly ugly and breaks if the vendor
decides to tinker with the internals of their mapping).

One way around it all would be to require a typedef to be generated for
string members. For example:

	// IDL
	struct Foo {
		string s;
	};

	// C++

	namespace CORBA {
		// ...
		class string_mgr { /* ... */ };	  // Mapping-internal class

		typedef string_mgr string_member; // New standard name
	};

	struct Foo {
		CORBA::string_mgr s;	// Mapping-internal type name
	};

This would allow me to portably pass a string member to a function because
the mapping would guarantee the existence of a type named "string_member"
(or whatever name we can settle on).

	void copy(const std::string & from, CORBA::string_member & to);

(Depending on the mapping implementation, there may be similar issues for
other types, such as references or arrays. If there are such mappings,
we'd need typedefs for those too.)

Basically, wherever a type name that is internal to the mapping can appear,
we end up with this kind of problem -- I can't pass a value of that type
because I don't know the type name. I'd like to fix that, if possible.

Resolution: rejected
Revised Text:
Actions taken:
June 15, 2001: received issue
May 13, 2002: closed issue

Discussion:
Rationale for Rejection
Making these operations pure virtual would make things harder for imple-mentations
that share the code for both user and system exceptions.


Issue 4496: Local interfaces issue 1 (cxx_revision)

Click
here for this issue's archive.
Source: Borland Software Corporation (Mr. Vijaykumar Natarajan, Vijaykumar.Natarajan(at)borland.com)
Nature: Uncategorized Issue
Severity:
Summary:
The current specification of the local mapping requires the
implementation to enforce the "localness" of the object. This was very
similar to the (old) java mapping. The inheritance heirarchy is as
follows

CORBA::LocalObject : CORBA::Object

abstract MyLocalObject : CORBA::Object

MyLocalObjectImpl : MyLocalObject, CORBA::LocalObject

The problem here is that there is no way for the ORB or the code
generators to enforce the last inheritance. And I am not even sure how
an ORB can detect  the following case

MyLocalObjectImpl : MyLocalObject 

which I suspect would be a very common error.

Proposal:

Fix the mapping to have the following heirarchy.

CORBA::LocalObject : CORBA::Object

abstract MyLocalObject : CORBA::LocalObject <===== Difference is here

MyLocalObjectImpl : MyLocalObject <== and here

Now an _is_a("IDL:omg.org/CORBA/LocalObject:1.0") is guaranteed to give
a correct answer and it is enforced by the IDL compilers.

This is also backward source compatible.

Resolution: see issue #4160 (the proposed resolution rejects this suggestion)
Revised Text:
Actions taken:
August 14, 2001: received issue
July 1, 2003: closed issue

Issue 4498: Escaped keyword mapping? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
the mapping says in section 1.1.2:

	To avoid C++ compilation problems, every use in OMG IDL of a
	C++ keyword 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. For example, an IDL interface
	"try" generates the names "_cxx_try_var" and "cxx_try_ptr,"
						      ^^^^^^^^^^^
	that is, the IDL compiler behaves as if the interface were
	names "cxx_try" and then applies the normal mapping rules.
	    ^  ^^^^^^^

Four issues here:

	1) I think we have a typo at the first place I highlighed. I
	   believe it should be "_cxx_try_ptr". (The leading underscore
	   is missing in the text as it stands now.)

	2) Typo: It should be '...were *named* "cxx_try"', not
	   '... were *names* "cxx_try"'

	3) To state that the compiler behaves is if the interface were
	   named "cxx_try" doesn't explain where the additional leading
	   underscore comes from because we get _cxx_*, not cxx_*
	   for the mapped identifiers.

	   Unfortunately, changing this sentence to state that the compiler
	   behaves as if the interface were named "_cxx_try" won't fix
	   it, because the leading underscore would be dropped by the
	   IDL keyword escape mechanism.
	
	4) The explanations are insufficient:

		interface try {};

	   This will result in "_cxx_try" as the interface name. But what
	   about the generated _tc_ type code constant? It could be:

	   a) _cxx_tc_try

	      This mapping would be consistent with the statement that
	      the "_cxx_" is a *prefix*.
	
	   b) _cxx__tc_try

	      Same as above but, given that, normally, the _tc_ type code
	      constants already start with an underscore, the escaped
	      mapping results in a double underscore.

	   c) _tc_cxx_try

	      This mapping would be consistent with the directive to map
	      as if the type were named "cxx_try".
	
	   d) _tc__cxx_try

	      Same as above but preserves the underscore for both the
	      "_tc_" and the "_cxx_", resulting in a double underscore.

To me, interpretation (d) seems the most natural and intuitive because
it preserves the leading "_tc_" for all type code constants (including ones
for identifiers that are C++ keywords). Also, if the mapping of the type
is to "_cxx_try", then it makes sense to have the double underscore because
that is consistent and doesn't make an exception to the rule of "use
"_tc_" for type code constants and "_cxx_" for IDL identifiers that are
C++ keywords."

Proposal:

Rewrite the above para to read:

	To avoid C++ compilation problems, every use in OMG IDL of a
	C++ keyword 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. For example, an IDL interface
	"try" generates the names "_cxx_try_var," "_cxx_try_ptr,"
	and "_tc__cxx_try".

Resolution: accept the suggested proposal
Revised Text: In 1.1.2, replace the "To avoid C++ compilation ..." paragraph by: To avoid C++ compilation problems, every use in OMG IDL of a C++ keyword 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. For example, an IDL interface "try" generates the names "_cxx_try_var," "_cxx_try_ptr," and "_tc__cxx_try".
Actions taken:
August 16, 2001: received issue
July 1, 2003: closed issue

Issue 4499: Dangling reference (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
On page 1-3 of the mapping, it says:

	For more information about CORBA compliance, refer to the
	Preface, "Definition of CORBA Compliance" on page viii.

That preface hasn't existed for a long time now.

Proposal:

	Strike this sentence.

Resolution: Strike this sentence
Revised Text: On p 1-3, remove the sentence: For more information about CORBA compliance, refer to the Preface, "Definition of CORBA Compliance" on page viii.
Actions taken:
August 16, 2001: received issue
July 1, 2003: closed issue

Issue 4530: Bug on _var references (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
he spec shows on page 1-13:

         class A_var {
         public:
                 // ...
                 operator const A_ptr&() const { return ptr_; }
                 operator A_ptr&() { return ptr_; }
                 // ...
         };

The conversion operator is overloaded for const and non-const.

Now, two issues here:

         1) It seems that "const A_ptr &" as the return type for the
            first operator is wrong because it really means
            "A * const", not "const A *". So, if anything, I think it
            would have to be written as

                 operator const A * &() const { return ptr_; }

         2) But why provide a const version of the conversion operator
            at all? Object references are never passed with a const
            qualifier, so why provide this conversion operator? I think
            it could simply be deleted without affecting anything.

Proposal: Delete the const version of the conversion operator.

Opinions?

Resolution: see above
Revised Text: In 1.3.7 (p 1-13) replace operator const A_ptr&() const { return ptr_; } by operator A_ptr() const { return ptr_; }
Actions taken:
August 22, 2001: received issue
July 1, 2003: closed issue

Discussion:
Resolution:
Replace 
operator const A_ptr&() const { return ptr_; }
by
operator A_ptr() const { return ptr_; }


Issue 4533: Fixed and truncation/rounding? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
Suppose we have:

	typedef fixed<4,3> FT;

	interface I {
		FT op();
	};

Suppose the server does:

	FT
	I_impl::
	op() throw(CORBA::SystemException)
	{
		double d = 1.0/3.0;
		return CORBA::Fixed(d);
	}

There are lots more digits in the return value than what is expected by the
client. What should be returned to the client. The rounded value? The
truncated value?

Similarly, what if we have:

	double d = 10000000;
	return CORBA::Fixed(d);

Do we return 9.999 to the client (which is the best we can do in this case)?

Of course, it is the responsibility of the programmer to make sure that
nonsense such as the second case doesn't happen. But the spec has to say
what happens if it does happen ;-)

Also, the first case will be very common -- what should happen in this case?

Resolution:
Revised Text:
Actions taken:
August 23, 2001: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 4539: UTF-8 and IDL character types in C++ (cxx_revision)

Click
here for this issue's archive.
Source: AdNovum Informatik (Mr. Stefan Wengi, nobody)
Nature: Uncategorized Issue
Severity:
Summary:
implementing support for wchar/wstring I ran into some potential
problems with the UTF-8 encoding for the IDL 'char' type.

Lets suppose we have a C++ server with a native single-byte code set
like ISO 8859-1.
The Code Set Conversion specification states that UTF-8 is the fallback
code set for 'char'.
-> a client could decide to send characters in UTF-8 encoding.

What happens on the server side with UTF-8 encoded characters that use
more than 1 byte and thus don't fit into the single byte character as
specified by the C++ mapping for IDL type 'char'?

Resolution:
Revised Text:
Actions taken:
August 29, 2001: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 4545: C++ mapping for CORBA::LocalObject (cxx_revision)

Click
here for this issue's archive.
Source: EMC (Mr. Ted Burghart, burghart_ted(at)emc.com)
Nature: Uncategorized Issue
Severity:
Summary:
In the latest C++ mapping including RTF report changes (ptc/01-06-07) I see no mention of a mapping for CORBA::LocalObject.  CORBA 2.4.x 3.7.6.2 states that this is to be specified in each language mapping.

How does it get mapped and, in particular, what are it's memory management semantics and relevant methods?

Resolution: same as proposed resolution for issue #4160
Revised Text:
Actions taken:
August 29, 2001: received issue
July 1, 2003: closed issue

Issue 4567: ORB interface destroy() operation issue (cxx_revision)

Click
here for this issue's archive.
Nature: Clarification
Severity: Significant
Summary:
The ORB interface destroy() operation defined in the core CORBA 2.3 spec seems to be missing from the associated C++ language mapping.

Resolution: Add the destroy operation to the ORB definition in 4.35.1 and 4.45.21
Revised Text: void destroy ();
Actions taken:
September 14, 2001: received issue
January 11, 2012: closed issue

Issue 4610: ValueRefCountBase::_add_ref (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
PortableServer::ValueRefCountBase derives from both CORBA::ValueBase and
PortableServer::ServantBase. This create a problem because ValueBase
contains

	virtual ValueBase * _add_ref() = 0;

but ServantBase contains

	virtual void _add_ref();

The easy fix would appear to be to change the ValueBase version to return void.

Anyone see a problem with this? (I don't understand why the ValueBase version
currently returns a ValueBase * anyway. Any subtle reason for this that I
am not aware of?)

Resolution: Change _add_ref() on ValueBase to return void.
Revised Text: In 1.17.5 (p 1-71) replace virtual ValueBase* _add_ref() = 0; by virtual void _add_ref() = 0;
Actions taken:
October 9, 2001: received issue
July 1, 2003: closed issue

Issue 4743: Context PIDL mapping bug (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
Section 1.31.3 says:

	- In the C mapping, set_one_value used strings, while
	  others used NamedValues containg any. Even though implementations
	  need only support strings as values, the signatures now uniformly
	  allow alternatives.

I would suggest to delete the entire bullet point. In particular, the notion
of allowing alternative data types as propery values for contexts doesn't
work because the receiver expects a sequence of strings with an even number
of elements; if anything but a string sequence is sent, the receiver
has no chance of unmarshaling it.

Resolution: Remove bullet as suggested
Revised Text: The C++-PIDL specification differs from the C-PIDL specification as follows: • Introduction of attributes for context name and parent. • The signatures for values are uniformly set to any. • The release operation frees child contexts.
Actions taken:
December 11, 2001: received issue
January 11, 2012: closed issue

Issue 4797: Add set of typedefs that would facilitate template programming (cxx_revision)

Click
here for this issue's archive.
Source: Memorial University of Newfoundland (Jeffrey Parsons, Ph.D., jeffreyp(at)mun.ca)
Nature: Uncategorized Issue
Severity:
Summary:
The addition amounts to a set of typedefs that would facilitate template
programming, added to each C++ skeleton class created for an IDL interface,
and analogous to the typedefs that already exist in the mapping for the stub
side. Say we have an IDL file

module foo
{
  interface bar {};
};

Then in generated code we're talking about something like:

namespace POA_foo
{
  class bar
  {
  public:
    typedef foo::bar _stub_type;
    typedef foo::bar_ptr _stub_ptr_type;
    typedef foo::bar_var _stub_var_type;
	.
	.
	.
  };
};


Resolution:
Revised Text:
Actions taken:
December 28, 2001: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 4871: Missin operations in Object interface, ptc/01-06-07 (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
in ptc/01-06-07, 1.34.1, several operations seem to be missing in the Object
interface, e. g.

get_client_policy()
get_policy_overrides()
validate_connection()

These are also missing in the Object C++ class, 1.34.2. create_request2() is
also missing here.

Resolution: see above
Revised Text: Add the following operations to the interface Object definition in 1.34.1 (at the end): Policy get_client_policy( in PolicyType type ); PolicyList get_policy_overrides( in PolicyTypeSeq types ); boolean validate_connection( out PolicyList inconsistent_policies ); string repository_id(); Object get_component (); ORB get_ORB (); Add the following member functions to the Object declaration in 1.34.2 (at the end): Policy_ptr _get_client_policy( PolicyType type ); PolicyList* _get_policy_overrides( const PolicyTypeSeq& types ); Boolean _validate_connection( PolicyList_out inconsistent_policies ); char* _repository_id(); Object_ptr _get_component(); ORB_ptr _get_ORB();
Actions taken:
February 27, 2002: received issue
July 1, 2003: closed issue

Discussion:
Resolution:
In 1.34.1, update the Object IDL to match the (pseudo) IDL in ptc/03-01-10. 
Add the corresponding C++ member functions to the C++ class in 1.34.2.


Issue 5440: Prohibit extracting from any into _out type? (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
Just as we prohibited direct extraction from any any into a _var type
due to the perils of memory management problems, we ought to prohibit
extracting into _out types of variable sized structured types for the
same reason

Resolution:
Revised Text:
Actions taken:
June 25, 2002: received issue

Discussion:
deferred in June 2011 to the next RTF



Issue 5450: Typographical problems (cxx_revision)

Click
here for this issue's archive.
Nature: Clarification
Severity: Minor
Summary:
Name: Bruce McIntosh 
Company: Boeing Australia 
mailFrom: bruce.mcintosh@boeing.com 
Notification: Yes 
Specification: C++ Language Mapping 
Section: 1.36.2 
FormalNumber: ptc/01-06-07 
Version: Proposed Available Revision 
RevisionDate: 01/26/2002 
Page: 1-136 
 The example given has a couple of small typographical problems: (1) the function signature specifies a void return type, but returns a Foo* (2) the function returns "foo_servant->this;" which I think should be "return foo_servant->_this();" 

Perhaps the example should read: 

Foo* some_function (/*...*/) { Servant_var<Foo_impl> foo_servant = new Foo_impl; foo_servant->do_something(); // might throw... some_poa->activate_object_with_id(...); return foo_servant->_this(); }

Resolution: Updated the example code as suggested
Revised Text: Foo* some_function(/*...*/) { Servant_var<Foo_impl> foo_servant = new Foo_impl; foo_servant->do_something(); // might throw... some_poa->activate_object_with_id(...); return foo_servant->_this(); }
Actions taken:
June 30, 2002: received issue
January 11, 2012: closed issue

Issue 5466: conversion algorithm not specified (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
C++ programmers will often want to use strings as
object identifiers, the C++ mapping provides several conversion
functions that convert strings to ObjectId and vice-versa:"


The purpose is so the programmer can pick an arbitrary natural language
string and use it as an ObjectId, not so that the programmer can
generate a randomly unreadable string out of a binary ObjectId.
   [...] the C++ mapping provides several conversion functions
    that convert strings to ObjectId and viceversa:
    [...]
    If conversion of an ObjectId to a string would result in
    illegal characters in the string (such as a NUL), the first two
    functions throw the CORBA::BAD_PARAM exception.


The conversion algorithm is not specified, and the ORB is free to
choose whatever encoding it likes for its Object IDs. (Object IDs
in stringified form need not be moved across address spaces (or,
at least, not across ORB boundaries), so having a proprietary
encoding is perfectly OK.)

Resolution:
Revised Text:
Actions taken:
July 19, 2002: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 5578: Initialized T_var? (cxx_revision)

Click
here for this issue's archive.
Source: Triodia Technologies Pty Ltd (Mr. Michi Henning, michi(at)triodia.com)
Nature: Uncategorized Issue
Severity:
Summary:
a discussion in comp.object.corba pointed out the difficulty
of testing whether a T_var has been initialized. There is
no _is_null() member function or some such. As a result,
calling operator->() appears to be the only way to test
whether a T_var is initialized:


    if (T_var.operator->())
        // It's initialized...


Not exactly elegant, but workable. However, the following
words in the spec get in the way:


"The overloaded operator-> returns the T* held by the T_var,
 but retains ownership of it. Compliant applications may not
 call this function unless the T_var has been initialized with a
 valid non-null T* or T_var."


These words forbid me to call operator->() until after the
T_var has been initialized, meaning that there is no portable
and compliant way to test whether a T_var is nil. I think
what was meant here is that


"Compliant applications may not *dereference the return value
of this function* unless the T_var has been initialized with a
valid non-null T* or T_var."


BTW -- using operator->() to test for null is a bit obscure.
We could add a _is_null() member to T_var for this. But,
given the versioning confustion we'd cause and the fact
that adding the member provides only marginal benefit,
I think it may be better to leave things as they are. (But
we should fix the description of operator->(), of course.)

Resolution: see above
Revised Text: On p 1-23, replace "Compliant applications may not call this function unless the T_var has been initialized with a valid non-null T* or T_var." with "Compliant applications may not dereference the return value of this function unless the T_var has been initialized with a valid non-null T* or T_var."
Actions taken:
August 20, 2002: received issue
July 1, 2003: closed issue

Discussion:
Resolution:
accept the proposal


Issue 5579: implementing local interfaces in C++ (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
There seems to be only two choices:


1.  Accept that changing interfaces to local breaks old code that implemented
POA interfaces using servants.  Not wonderful, but I can live with it, since
the source code changes are evident and fixed in a straightforward fashion.


2.  Try to come up with a scheme where local objects can be implemented either
by using LocalObject or by the traditional servant route.  This is more
specification work, but cleaner, and I an live with it too.


While we are at it, we should make sure that any other CORBA 3.0 changes are
properly reflected in the C++ mapping as well.

Resolution: see proposed resolution for issue #4160
Revised Text:
Actions taken:
August 9, 2002: rceived issue
July 1, 2003: closed issue

Issue 5580: No Mapping for Local interface in C++ (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
The bit that defines the mapping of local
interfaces to C++ seems to be missing from the specification (ptc/99-10-09 has a change
> based on the CCM specification, which does not appear in
> ptc/01-06-07. )


Resolution: same as proposed resolution for issue #4160
Revised Text:
Actions taken:
August 9, 2002: received issue
July 1, 2003: closed issue

Discussion:
So that means we do not have a standard C++ mapping for even CORBA 2.6,
or 2.5 etc. let alone 3.0..... Sigh. So CORBA has pretty much become a
single implementation language show.... Oh well. Any idea how soon this
can be fixed? Or is this one of those that will take until the next
decade to fix?:-) Perhaps we need to bring Bernard, the current chair
into the loop (He should be on the cxx list and hence should come across
this message. I wonder what C++ implementations of 2.6 are actually
doing


Issue 5784: need mapping for get_orb and get_component on CORBA::Object (cxx_revision)

Click
here for this issue's archive.
Source: Hewlett-Packard (Dr. Jishnu Mukerji, jishnu(at)hp.com)
Nature: Uncategorized Issue
Severity:
Summary:
The Core issue that adds get_orb to CORBA::Object has passed. It would
be good if you were to initiate an issue in the C++ RTF to make the
necessary changes in the C++ pseudo-object mapping section for Object to
incorporate this new operation. While you are at it you might also wish
to throw in the get_component operation, which was added by the
Components specification, and is yet to get into the C++ mapping chapter
(I think).


These might be way easier tor esolve than some of the weightier issues
that you have been struggling with, since these have very
straightforward and non-controversial resolutions

Resolution: same as proposed resolution for issue #4871
Revised Text:
Actions taken:
December 10, 2002: received issue
July 1, 2003: closed issue

Issue 5807: String_var and C++ implicit conversions (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity:
Summary:
This e-mail addresses three CORBA C++ Revision Task Force issues: 
        3796 
        3797 
        4530 
It also addresses section 6.10.2 of your book, "Advanced CORBA 
Programming with C++" ((C) 1999). 

Starting with 6.10.2 of your book, p. 164, you show an example where a 
CORBA::String_var is implicitly converted to 'const char *' in a 
function call, with the conversion operators as defined on p. 157 (sect. 
6.10). 

However, the C++ language won't choose the 'const char *() const' 
operator as you (and I) would think.  Instead, since the String_var 
isn't const in the call's scope, the 'char *()' (i.e., non-const) 
operator is chosen. 

Aparently, the conversion path 
        String_var -> char * -> const char * 
Is considered "better" than the conversion path we'd expect, namely 
        String_var -> const String_var -> const char * 

Further, updating String_var with the resolutions of Issues 3796 and 
3797 (as found in http://cgi.omg.org/issues/cxx_revision.html), namely 
removing 'operator char *()' and adding 'operator char *&()' now leads 
to the conversion path 
        String_var -> char *& -> const char * 
The 'const char *' operator is still bypassed, and with 'operator char 
*&()' in the picture, it seems trouble is more likely. 

For reference, take a look at the USENET newsgroup comp.std.c++, the 
thread of "Subject: Implicit conversion of g++", starting 2000/03/02 (I 
know that long URL's don't e-mail well, but... 
http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&threadm=p6qr 
9dsxi04.fsf%40informatik.hu-berlin.de&rnum=1&prev=/groups%3Fhl%3Den%26lr 
%3D%26ie%3DUTF-8%26oe%3DUTF-8%26selm%3Dp6qr9dsxi04.fsf%2540informatik.hu 
-berlin.de) 

For reference, I've attached a little source-code. Imagine that the 
class is String_var.  This program produces identical results under two 
compilers: 
        - Microsoft's Visual C++ 6.0 (SP3) 
        - CygWin's gcc v3.2 

Though the String_var implementations I've seen aren't adversely 
affected, I wanted to bring this compiler behavior to your attention. I 
think the CORBA & C++ folks should eventually know, too, since CORBA and 
C++ seem to miss each other here.

Resolution: see above
Revised Text:
Actions taken:
January 10, 2003: received issue
July 1, 2003: closed issue

Discussion:
Resolution:
Add 
const char * operator() 
to String_var


Issue 5854: 1.16.3 Extraction from any (cxx_revision)

Click
here for this issue's archive.
Nature: Revision
Severity: Minor
Summary:
The question is about 99-07-41.pdf, as far as I know the latest C++ mapping specification. "1.41.5 Any Class" prescribes "Boolean operator>>=(const Any&, const char*&);" for unbounded strings, and "1.16.3 Extraction from any" says that unbounded strings are extracted by value. This seems to be contradictory: I seem to remember that const char* cannot be delete'd, though I don't find it in ISO/IEC 14882:1998(E). But, regardless of anything imposed by C++, the current mapping precludes a safe technique like (safe as in exception-proof): >> String_var theString; if(!(theAny>>=theString.out())){ ... } << I therefore propose that the mapping be changed to "Boolean operator>>=(const Any&, char*&);". This seems to work all right on my implementation (RayORB), for gcc 3.2 (MS VC++ 6.0 doesn't seem to care one way or the other, but I suppose that is wrong, although I'm not entirely sure). 

Resolution:
Revised Text:
Actions taken:
February 10, 2003: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 6163: _var's and valuetypes (cxx_revision)

Click
here for this issue's archive.
Source: Oracle (Dr. Andrew Piper, andyp(at)bea.com)
Nature: Uncategorized Issue
Severity:
Summary:
1.9.1 says:


"The copy constructor deep-copies any data pointed to by the T_var constructor
parameter. This copy will be destroyed when the T_var is destroyed or when a new
value is assigned to it. Compliant implementations may, but are not required to, utilize
some form of reference counting to avoid such copies."


and


"The normal assignment operator deep-copies any data pointed to by the T_var
assignment parameter. This copy will be destroyed when the T_var is destroyed or
when a new value is assigned to it. Assigning a null pointer to a T_var is legal and
results in deallocation of the data pointed to by the T_var."


So my question is, is it legal to use ValueBase::_add_ref() and _remove_ref() instead of _copy_value() in this instance when T_var is representing a valuetype?

Resolution:
Revised Text:
Actions taken:
September 11, 2003: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 6245: No portable way to create a OUT argument for a DII request (cxx_revision)

Click
here for this issue's archive.
Source: Memorial University of Newfoundland (Jeffrey Parsons, Ph.D., jeffreyp(at)mun.ca)
Nature: Clarification
Severity: Significant
Summary:
Since the Any constructor from type code, void* value and boolean release flag has been eliminated, there is no longer any portable way to create an OUT argument for a DII request, without also assigning a value to it. 

I propose either a constructor from type code or changing the behavior of the type code set method to always succeed if the Any's TCKind is tk_null.

Resolution:
Revised Text:
Actions taken:
September 5, 2003: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 6276: Sequence _var needs const operator [] (cxx_revision)

Click
here for this issue's archive.
Source: Floorboard Software (Mr. Jonathan Biggar, jon(at)floorboard.com)
Nature: Uncategorized Issue
Severity:
Summary:
Footnote 11 on page 1-48 of the 1.1 version of the C++ language mapping states that sequence _var classes don't have a const version of "operator []".  The justification in the footnote is incorrect.


This footnote should be removed, and the operator provided, since it otherwise prevents accessing sequence members through a const reference to a sequence _var.

Resolution:
Revised Text:
Actions taken:
September 25, 2003: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 6413: Concrete ValueType _init class problem (cxx_revision)

Click
here for this issue's archive.
Source: AT&T (Dr. Duncan Grisby, )
Nature: Revision
Severity: Significant
Summary:
The second-to-last paragraph of section 1.17.10.3 says 

"For valuetypes that have no operations or initializers, a concrete type-specific factory class is generated whose implementation of the create_for_unmarshal function simply constructs an instance of the OBV_ class for the valuetype using new and the default constructor." 

As specified, that requires the generation of invalid C++. The OBV_ class is abstract since it does not have implementations of the ValueBase reference counting functions. 

Perhaps the intention is that the OBV_ classes in such cases should derive from DefaultValueRefCountBase. However, the wording and explanation in section 1.17.6 explicitly forbids this: 

"Note that it is the application-supplied concrete valuetype classes that must derive from these mix-in classes, not the valuetype classes generated by the IDL compiler." 

One solution that avoids the problem, and avoids restricting the application's use of the OBV_ classes is to generate yet another class that derives from both the OBV_ class and DefaultValueRefCountBase, for instantiation by the _init class's create_for_unmarshal function. 

Resolution:
Revised Text:
Actions taken:
November 3, 2003: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 11403: Section: 13.6 Server mapping (cxx_revision)

Click
here for this issue's archive.
Nature: Enhancement
Severity: Significant
Summary:
Althrough I report my issue as a C++ issue, actually it is a common issue for other languages also. In current CORBA standard, a activated CORBA Servant object in the POA is shared by all the clients. But in many applications, a client connects to the server and calls some CORBA object methods to create a lot of connection related CORBA objects. Normally, the client will call "destroy" method of these CORBA object to destroy them before existing. But if the client exists abnormally, these created CORBA object will never be destroyed and never be used by any client. We can call this kind of CORBA object as "floating" CORBA object. The CORBA server application runs longer, the "floating" CORBA objects becomes more. And eventually, these "floating" CORBA objects will consume all the memory resources/CPU resources, then the CORBA server crashes and has to be restarted. The "floating" CORBA objects problem at the server side is not easy to be solved. For this problem, if the CORBA standard provides a method to solve it, the CORBA server will run more robust. Actually, the underlying network connection broken can be detected very effectively and rapidly. The CORBA server just simply ignores the network connection lost event and does not pass it to activated CORBA object even if the CORBA object is connection related object because current CORBA standard thinks that all the CORBA objects in the server are shared to all clients. If the server can notify the network connection lost event to the connection related CORBA objects, the developper can do the clean job on it. A simple method can solve the "floating" CORBA object problem. It is not required to add any new interface or data structure to current orb.idl. It is just required to add some new language mapping methods at server side only. I will give an example in C++ to show this simple method. A IShared,IConnSpec and IOtherConnectionSpec interfaces are defined below: interface IOtherConnectionSpec { ... } interface IConnectionSpec { IOtherConnectionSpec someMethod(); } interface IShared { IConnectionSpec createConnSpec( in string param ); }; These interfaces will be used in this example. 1) the IShared will be shared by all the clients, it is activated like this: SharedImpl sharedImpl( ... ); ... sharedImpl._this(); 2) add new mapping method for the "POA_IShared::createConnSpec()" like this: IConnectionSpec_ptr POA_IShared::createConnSpec( char* param, const ConnectionContext& connCtx ); In this method, a parameter named ConnectionContext that represents the connection between the client and server is added. This method has a default implementation like this: IConnectionSpec_ptr POA_IShared::createConnSpec( const char* param, const ConnectionContext& connCtx ){ //just ignore the connCtx like the current CORBA standard defines return createConnSpec( param ); } 3) If the user wants to create a connection related object, he/she must overload the "IConnectionSpec_ptr createConnSpec( char* param, const ConnectionContext& connCtx )" method and active the object with "this_( const ConnectionContext& connCtx )" method: IConnectionSpec_ptr POA_IShared::createConnSpec( const char* param, const ConnectionContext& connCtx ){ ... IConnectionSpec *connSpecImpl = new IConnectionSpec( ... ); ... //use the connection related active method return connSpecImpl->this_( connCtx ); } in this method, the user uses the "this_( const ConnectionContext& connCtx)" method instead of the old "this()"" method to active the CORBA object. This activated CORBA object becomes a connection related object instead of shared object. Note: User can use the "this_( const ConnectionContext& connCtx)" method to active a shared object also. At this time, the ConnectionContext is a global variable "NO_CONNECTION_CONTEXT". 4) add a new mapping method named "getConnectionContext()" for every CORBA object. const ConnectionContext& IShared::getConnectionContext(); const ConnectionContext& POA_IConnectionSpec::getConnectionContext(); In this way, the IConnectionSpec can create and activate any other connection related CORBA object like this: IOtherConnectionSpec_ptr POA_IConnectionSpec::someMethod() { ... OtherConnectionSpecImpl *otherConnSpecImpl = new OtherConnectionSpecImpl(...); ... return otherConnSpecImpl->this_( getConnectionContext() ); //or ? //return otherConnSpecImpl->this_( this ); } 5) add a new mapping method named "connectionLost()" for every CORBA object. When the network connection is lost, the CORBA server should find all the CORBA object associated with this network connection and call their "connectionLost()" method. The "connectionLost()" and its default implementation is listed below: void POA_IConnectionSpec::connectionLost() { //just delete this connection related object simply delete this; } void POA_IOtherConnectionSpec::connectionLost() { //just delete this connection related object simply delete this; } Because the SharedImpl object that created in the 1) step does not assicate with any connection, its "connectionLost()" method will not be called for ever. 

Resolution:
Revised Text:
Actions taken:
September 14, 2007: received issue

Discussion:
deferred in June 2011 to the next RTF


Issue 12856: Section 4.5.4: parameter to _narrow (cxx_revision)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
In section 4.5.4 it says: Unlike _duplicate, the parameter to _narrow is a reference of an object of any interface type (Object_ptr). If the actual (runtime) type of the parameter object can be widened to the requested interface’s type, then _narrow will return a valid object reference; it should say (widened to narrowed) Unlike _duplicate, the parameter to _narrow is a reference of an object of any interface type (Object_ptr). If the actual (runtime) type of the parameter object can be narrowed to the requested interface’s type, then _narrow will return a valid object reference;

Resolution: In section 4.5.4 change widened to narrowed
Revised Text: If the actual (runtime) type of the parameter object can be narrowed to the requested interface’s type, then _narrow will return a valid object reference; otherwise, _narrow will return a nil object reference.
Actions taken:
September 18, 2008: received issue
January 11, 2012: closed issue

Issue 12913: Servant_var + spec typo? (cxx_revision)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
I was looking at the OMG IDL to C++ mapping specification, specifically
page 123 and came across the below. It looks to me that their
implementation in the spec is NOT correct. Shouldn't the swap function
take the "tmp" Servant_var?


Servant_var& operator=(Servant* p)
{
  if (_ptr != p) {
    Servant_var<Servant> tmp = p;
    swap(_ptr, p);
  }
  
  return *this;
}


Servant_var&
operator=(const Servant_var& b)
{
  if (_ptr != b._ptr) {
    Servant_var<Servant> tmp = b;
    swap(_ptr, b._ptr);
  }


  return *this;
}

Resolution: Update assignment operator as proposed
Revised Text: Servant_var& operator=(const Servant_var& b) { if (_ptr != b._ptr) { Servant_var<Servant> tmp = b; swap(_ptr, b._ptr); } return *this; }
Actions taken:
October 6, 2008: received issue
January 11, 2012: closed issue

Discussion:


Issue 14169: make it possible to write more generic C++ code (cxx_revision)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The spec defines: // C++ class Seq_var; class Seq { public: typedef Seq_var _var_type; // ... }; We propose to extend this to the following to make it possible to write more generic C++ code. // C++ class Seq_var; class Seq_out; class Seq { public: typedef Seq_var _var_type; typedef Seq_out _out_type: typedef ::CORBA::ULong _size_type; // ... };

Resolution: In section 4.11 add to the example at the end Seq_out and a _out_type typedef as in the revised text below. The _size_type typedef will make it possible in the user code to differentiate between the index of a sequence type and a user defined ULong value. To section 4.15 add the sentence To facilitate template-based programming, a nested public typedef _size_type is delivered as the type representing the length of the sequence. And to the sequence class examples in section 4.15 the following typedef ULong _size_type;
Revised Text: To facilitate template-based programming, all struct, union, and sequence classes contain nested public typedefs for their associated T_var and T_out types. For example, for an IDL sequence named Seq, the mapped sequence class Seq contains a _var_type and _out_type typedef as follows: // C++ class Seq_var; class Seq_out; class Seq { public: typedef Seq_var _var_type; typedef Seq_out _out_type; // ... }; Revised Text for 4.15: For each different typedef naming an anonymous sequence type, a compliant mapping implementation provides a separate C++ sequence type. To facilitate template-based programming, a nested public typedef _size_type is delivered as the type representing the length and maximum of the sequence. For example: // IDL typedef sequence<long> LongSeq; typedef sequence<LongSeq, 3> LongSeqSeq; // C++ class LongSeq // unbounded sequence { public: typedef ULong _size_type; LongSeq(); // default constructor LongSeq(ULong max); // maximum constructor LongSeq( // T *data constructor ULong max, ULong length, Long *value, Boolean release = FALSE); LongSeq(const LongSeq&); ~LongSeq(); ... }; class LongSeqSeq // bounded sequence { public: typedef ULong _size_type; LongSeqSeq(); // default constructor LongSeqSeq( // T *data constructor ULong length, LongSeq *value, Boolean release = FALSE); LongSeqSeq(const LongSeqSeq&); ~LongSeqSeq(); ... };
Actions taken:
July 31, 2009: received issue
January 11, 2012: closed issue

Issue 14852: Describe operator != and == for all generated types (cxx_revision)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
the C++ mapping should explicitly list operator == and operator != in the examples and text. If it is not allowed to use ==/!= the methods should be declared private

Resolution:
Revised Text:
Actions taken:
December 10, 2009: received isuse

Issue 16283: C++ keywords should be updated (cxx_revision)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The C++ keywords in section 4.47 should be updated and extended with the addition of C++0x

Resolution: Add the following keywords to the table on page 154 as part of section 4.47
Revised Text: The table should contain the following keywords: and and_eq alignas alignof asm auto bitand bitor bool break case catch char char16_t char32_t class compl const constexpr const_cast continue decltype default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new noexcept not not_eq nullptr operator or or_eq private protected public register reinterpret_cast return short signed sizeof static static_assert static_cast struct switch template this thread_local throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while xor xor_eq
Actions taken:
May 27, 2011: received issue
January 11, 2012: closed issue

Issue 16355: Interface should add _out_type typedef (cxx_revision)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Enhancement
Severity: Minor
Summary:
To really support template meta programming the inteface should deliver a typedef _out_type besides the already defined _ptr_type and _var_type

Resolution: Add a _out_type typedef to the interface class
Revised Text: To 4.5.6 add: For example, interface A results in the object reference type A_ptr, the helper type A_var, and the out parameter type A_out. To facilitate template-based programming, a typedef for the A_out type is also provided in the interface class (see “Interface Mapping Example” on page 11). The typedef for A_out is named A::_out_type. The general form for object reference _out types is shown below. To the example on page 11 add: class A_out; class A : public virtual Object { public: typedef A_ptr _ptr_type; typedef A_var _var_type; typedef A_out _out_type;
Actions taken:
July 7, 2011: received issue
January 11, 2012: closed issue

Issue 16356: valuetype classes should add _out_type typedef (cxx_revision)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Enhancement
Severity: Minor
Summary:
To really support template meta programming the valuetype classes should deliver a typedef _out_type besides the _ptr_type and _var_type which are proposed to be added as part of issue 1794

Resolution: Add a _out_type typedef to the valuetype class
Revised Text: See issue 1797 for the revised text of both issues
Actions taken:
July 7, 2011: received issue
January 11, 2012: closed issue

Issue 16358: get_policy should return Policy, not Policy_ptr (cxx_revision)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
The Object::get_policy returns a Policy in IDL, not a Policy_ptr, that is the C++ return value

Resolution: Replace in 4.36.1 the text Policy_ptr to Policy
Revised Text: Policy get_policy(in PolicyType policy_type);
Actions taken:
July 8, 2011: received issue
January 11, 2012: closed issue

Issue 16528: valuetype example has errors (cxx_revision)

Click
here for this issue's archive.
Source: Remedy IT (Mr. Johnny Willemsen, jwillemsen(at)remedy.nl)
Nature: Clarification
Severity: Minor
Summary:
In IDL it gives:


// IDL
valuetype V {
factory create_bool(boolean b);
factory create_(char c);
factory create_(octet o);
factory create_(short s, string p);
...
};


But it should be


// IDL
valuetype V {
factory create_bool(boolean b);
factory create_char(char c);
factory create_octet(octet o);
factory create_other(short s, string p);
...
};

Resolution:
Revised Text:
Actions taken:
September 7, 2011: received issue

Issue 16892: need unchecked narrow (cxx_revision)

Click
here for this issue's archive.
Source: Raytheon (Mr. Roy M. Bell, )
Nature: Enhancement
Severity: Significant
Summary:
need an _unchecked_narrow static operation that is similar to the _narrow. It will take in an object pointer but unlike _narrow will not check for compatibility before creating a new object reference.

Resolution:
Revised Text:
Actions taken:
December 12, 2011: received issue