HP aC++/HP C A.06.25 Programmer's Guide

void f(String &s) {
s[0] = 0;
}
Execution Order of Static Constructors in Shared Libraries
In HP C++ (cfront), static constructors in shared libraries listed on the link-line are
executed, by default, in left-to-right order. HP aC++ executes static constructors in
depth-first order; that is, shared libraries on which other files depend are initialized
first. Use the -depth command-line option on the CC command line for enhanced
compatibility with HP aC++.
In addition, HP aC++ reverses the initialization order of .o files on the link-line. To aid
in migration, you can group all .o files together and all .so files together.
Example:
aCC file1.o file2.o lib1.so lib2.so lib3.so
In this scenario, cfront would initialize file2.o first, and then file1.o, while HP
aC++ initializes file1.o and then file2.o. You must take this into account in your
cfront code to avoid link problems with HP aC++.
More Frequent Inlining of Inline Code
HP C++ does not inline some functions even when you request for it. This happens
when the function is too complex. If you use the +w option, the compiler displays a
message whenever it does not inline a requested function.
HP aC++ almost always inlines functions for which you have specified the inline
keyword.
Changes in C++ Syntax
When you migrate from HP C++ to HP aC++, in addition to changes related to standards
based keywords, you may need to make changes to your source code in the following
areas:
“Explicit int Declaration” (page 278)
“The for Statement, New Scoping Rules” (page 278)
“struct as Template Type Parameter is Permitted” (page 279)
“Base Template Class Reference Syntax Change” (page 279)
“Tokens after #endif” (page 280)
“overload not a Keyword” (page 280)
“Dangling Comma in enum” (page 281)
“Static Member Definition Required” (page 281)
“Declaring friend Classes” (page 281)
“Incorrect Syntax for Calls to operator new” (page 282)
“Using :: in Class Definitions” (page 282)
Migration Considerations Related to Standardization 277