очень простой код и получение ошибки C2712, не могли понять, почему

у меня проблемы на некоторое время с error C2712: Cannot use __try in functions that require object unwinding, после сужения проблемы, у меня остался очень простой код, и я не могу понять, почему он вызывает эту ошибку. Я использую Visual Studio под windows.

я компилирую с /EHa (я не использую /EHsc)

причина я использую __try/__except, а не try/catch это потому, что я хочу поймать все ошибки и не хочу, чтобы программа сбой при любых обстоятельствах, в том числе, например, деление на 0, что try-catch не уловить.

#include <string>
static struct myStruct
{
    static std::string foo() {return "abc";}
};

int main ()
{
    myStruct::foo();

    __try 
    { }
    __except (true)
    { }

    return 0;
}

выход:

error C2712: Cannot use __try in functions that require object unwinding

1 ответов


вот решение. Подробнее читайте Ошибка Компилятора C2712

#include <string>
struct myStruct
{
    static std::string foo() {return "abc";}
};

void koo()
{
    __try 
    { }
    __except (true)
    { }
}

int main ()
{
    myStruct::foo();   
    koo();
    return 0;
}

Дополнительное Примечание: не требуется static если нет объявления с использованием вашей структуры (myStruct).