A fix is available
APAR status
Closed as program error.
Error description
When compiling the test case below, the compiler issues an incorrect error message. The diagnostic refers to this line: typedef char staticassert_type[sizeof(Type) == 2 ? 2 : 0]; // But this is NOT !! indicating that sizeof(Type) is not 2. The line just above it /// char staticassert_var[sizeof(Type) == 2 ? 2 : 0]; is accepted, when uncommented. If you uncommend line 4, and comment line 5 instead, the program compiles and links. When you run it, the value it returns is 2 (sizeof(Resolver<int>::Type)). ===== COMPILE COMMAND: xlC test.cpp ===== TESTCASE: $ cat test.cpp template <typename T> struct Resolver { typedef struct { char a[2]; } Type; // char staticassert_var[sizeof(Type) == 2 ? 2 : 0]; // This is accepted typedef char staticassert_type[sizeof(Type) == 2 ? 2 : 0]; // But this is NOT !!! }; int main() { return sizeof(Resolver<int>::Type); } $ ===== ACTUAL OUTPUT: $ xlC test.cpp "test.cpp", line 5.54: 1540-0135 (S) The array bound cannot be zero. $ ===== EXPECTED OUTPUT: Clean compile
Local fix
n/a
Problem summary
USERS AFFECTED: The problem can be seen when a sizeof expression is used to compute an array bound inside a template definition. PROBLEM DESCRIPTION: The compiler was incorrectly evaluating a sizeof expression inside a template definition and reporting an error.
Problem conclusion
The compiler has been fixed to resolve the above issue.
Temporary fix
Comments
APAR Information
APAR number
IV37923
Reported component name
XL C/C++ FOR AI
Reported component ID
5725C7200
Reported release
C10
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2013-03-12
Closed date
2013-03-12
Last modified date
2013-03-13
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
XL C/C++ FOR AI
Fixed component ID
5725C7200
Applicable component levels
RC10 PSN U858524
UP06/09/13 C
Rate this page:
Average rating
Copyright and trademark information
IBM, the IBM logo and ibm.com are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at "Copyright and trademark information" at www.ibm.com/legal/copytrade.shtml.