https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89491
--- Comment #5 from Dávid Bolvanský <david.bolvansky at gmail dot com> --- Let's take the original example with small modification: int square(int x) { return x*x; } int add(int x) { return x + x; } typedef int (*p)(int); static const p arr[4] = {square, add}; int test(int x) { int res = arr[x](1); return res; } Nothing is expanded/inlined. ICC can do it for "two items in arr" case.