Aviso do compilador (nível 4) C4714

função 'function' marcada como __forceinline não embutida

A função determinada foi selecionada para expansão embutida, mas o compilador não executou o inlining.

Embora __forceinline seja uma indicação mais forte para o compilador do que __inline, o inlining ainda é executado a critério do compilador, mas nenhuma heurística é usada para determinar os benefícios de embutir essa função.

Em alguns casos, o compilador não embute uma função específica por motivos mecânicos. Por exemplo, o compilador não embutirá:

  • Uma função se isso resultar na mistura de SEH e EH C++.

  • Algumas funções com objetos construídos por cópia passados por valor quando -GX/EHs/EHa está ativado.

  • Funções que retornam um objeto desenrolável por valor quando -GX/EHs/EHa está ativado.

  • Funções com assembly embutido ao compilar sem -Og/Ox/O1/O2.

  • Funções com uma listas de argumentos variáveis.

  • Uma função com uma instrução try (tratamento de exceção C++).

O seguinte exemplo gera o erro C4714:

// C4714.cpp
// compile with: /Ob1 /GX /W4
__forceinline void func1()
{
   try
   {
   }
   catch (...)
   {
   }
}

void func2()
{
   func1();   // C4714
}

int main()
{
}