Ice provides two distinct C++ mappings:
This was the only C++ mapping provided by Ice until version 3.6. This mapping relies only on features present in the ISO/IEC 14882:1998 C++ standard, informally known as C++98. It includes its own helper classes for smart pointers, threads, mutexes and so on.
This is a new mapping that takes advantage of features in the ISO/IEC 14882:2011 C++ standard, and occasionally newer features. This mapping requires a recent C++ compiler in C++11 or C++14/17 mode.
This chapter describes these two mappings in detail. When the same rule applies to both mappings, this rule is simply described as part of the "C++ mapping".
slice2cpp, the Slice-to-C++ translator, always generates code for both mappings, and C++ headers files provided by Ice, such as
IceGrid/IceGrid.h, can be used with either mapping.
The C++98 mapping is provided for backwards compatibility, and will not be included in future releases. If you are starting a new project with Ice, please use the C++11 mapping. If you are upgrading an existing application, you should consider upgrading your code to use the C++11 mapping.
Selecting the C++98 Mapping
The default Ice for C++ mapping is currently C++98, and you do not need to do anything special to select this mapping.
The Ice C++11 and Ice C++98 libraries are built from the same source code, in ice/cpp. The resulting C++ libraries are nevertheless language mapping specific:
libIce++11.so is for the Ice C++11 mapping, while
libIce.so is for the Ice C++98 mapping.