[omniORB] omniidl (2.8.0 pre-release 1) Bug?
Sai-Lai Lo
S.Lo@uk.research.att.com
09 Aug 1999 11:50:07 +0100
>>>>> Ken Feuerman writes:
> Suppose I have the following IDL:
> // idltest.idl:
> module M
> {
> interface A
> {
> typedef short Arr[4];
> void meth(out Arr arrayArg);
> };
> };
> When building under MSVC++ 5.0, I get a compile-time error:
> idltest.h(106) : error C2027: use of undefined type 'A'
> The compiler error is referring to a C++ typedef for Arr_out in the
> generated header. If I modify the IDL so that the definition of Arr is
> outside the scope of A, the compiler error goes away.
> This problem did not exist with omniORB 2.6.0; I have not tried this with
> omniORB 2.7.x. Is this a bug with omniidl, or with the compiler?
This is a "bug" in omniidl2 (2.8.0pre1 only) because it forgets to
workaround a bug in MSVC++. Try this patch:
% diff -c omniORB_280pre1/src/tool/omniidl2/omniORB2_be/o2be_array.cc new/src/tool/omniidl2/omniORB2_be/o2be_array.cc
*** omniORB_280pre1/src/tool/omniidl2/omniORB2_be/o2be_array.cc Fri Jun 18 21:48:41 1999
--- new/src/tool/omniidl2/omniORB2_be/o2be_array.cc Mon Aug 9 11:43:15 1999
***************
*** 1063,1069 ****
ubname = tdef->fqname();
}
else {
! ubname = tdef->unambiguous_name(used_in);
}
char* p = new char[strlen(ADPT_CLASS_TEMPLATE)+strlen("<, >")+
--- 1063,1069 ----
ubname = tdef->fqname();
}
else {
! ubname = tdef->uqname();
}
char* p = new char[strlen(ADPT_CLASS_TEMPLATE)+strlen("<, >")+
--
Sai-Lai Lo S.Lo@uk.research.att.com
AT&T Laboratories Cambridge WWW: http://www.uk.research.att.com
24a Trumpington Street Tel: +44 1223 343000
Cambridge CB2 1QA Fax: +44 1223 313542
ENGLAND