-
Key: CORBA25-12
-
Legacy Issue Number: 4170
-
Status: closed
-
Source: Zuehlke Engineering ( Frank Pilhofer)
-
Summary:
The discussion for issue 3525 shows that it is legal to redefine a type
in a derived interface, as ininterface B
{ typedef string S; };
{ typedef long S; }
interface D : B;
However, I don't think that this legality is obvious from the text. On
page 3-52, it says that "inheritance causes all identifiers defined in
base interfaces to be visible in derived interfaces." Then, on page
3-56, it is said that "once a type has been defined anywhere within
the scope of a module, interface or valuetype, it may not be redefined
except within the scope of a nested module or interface."Since B::S is not "defined" but only "visible" in D, and D is not a
nested interface but a derived interface, there seems to be a gray
area.Proposed resolution:
Edit the first paragraph of 3.15.3 (Special Scoping Rules for Type
Names) on p 3-56 to read:"Once a type has been defined anywhere within the scope of a module,
interface or valuetype, it may not be redefined except within the
scope of a nested module, interface or valuetype, or within the
scope of a derived interface or valuetype."Edit the following example to include, after interface A, but before
the erroneous redefinition of ArgType,interface B : A {
{ // OK, redefined in derived interface ArgType x; // x is a long A::ArgType y; // y is a string }
typedef long ArgType; // OK, redefined in derived interface
struct S;
}; -
Reported: CORBA 2.4.1 — Tue, 23 Jan 2001 05:00 GMT
-
Disposition: Resolved — CORBA 2.5
-
Disposition Summary:
Make the suggested change clarifying the inheritance case
-
Updated: Fri, 6 Mar 2015 20:58 GMT
CORBA25 — Type redefinition in derived interface
- Key: CORBA25-12
- OMG Task Force: Core December 2000 RTF