Ice provides two distinct C++ mappings:
This was the only C++ mapping provided by Ice until version 3.7. 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 the C++11 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.
Selecting the C++11 Mapping
You select the C++11 mapping by compiling all your code with
-DICE_CPP11_MAPPING. This macro should be defined in your build projects, not in your source files.
You also need to link your application with the
++11 variant of the Ice libraries, for example:
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.