As Tim says, it's depending on what options you used.
1. /Ob0: no inlining at all. "inline" keyword does not matter
2. /Ob1: "inline" will help, and some C++ inlining (default constructs etc.)
3. /Ob2: more than /Ob1; and compiler will do more aggressive inlining as well for small fundtions without "inline" if the small functions are in the same file (compiling unit)
4. /Qipo: more than /Ob2, for small functions that are even in other files.
There is a default setting for "small" functions. But it's controlable as well using the following options:
set size limit for inlining small routines
/Qinline-min-size- no size limit for inlining small routines
set size limit for inlining large routines
/Qinline-max-size- no size limit for inlining large routines
maximum increase in size for inline function expansion
/Qinline-max-total-size- no size limit for inline function expansion
maximum number of inline instances in any function
/Qinline-max-per-routine- no maximum number of inline instances in any function
maximum number of inline instances in the current compilation
/Qinline-max-per-compile- no maximum number of inline instances in the current compilation
set inlining upper limits by n percentage
/Qinline-factor- do not set set inlining upper limits
/Qinline-forceinline treat inline routines as forceinline
/Qinline-dllimport allow(DEFAULT)/disallow functions declared __declspec(dllimport) tobe inlined
/Qinline-calloc directs the compiler to inline calloc() calls as malloc()/memset()
Note: those fine tune optimization optionsare only available in the 11.x professional edition of the Intel C++ Compiler.