views:

57

answers:

2

I've recently upgraded my project from Visual Studio 2008 to Visual Studio 2010.

By enabling Code Analysis and compiling in Release, I'm getting warning CA1806: Do not ignore method results.

I've managed to reduce the code that produces the warning to this code:

.h file:

public ref class Foo
{
public:
    void Bar();
};

.cpp file:

void Foo::Bar()
{
    try
    {
    }
    catch (const std::exception&) // here I get the warning
    {
    }
}

the warning:

CA1806 : Microsoft.Usage : 'Foo::Bar(void)' calls 'Global::__CxxRegisterExceptionObject(void*, void*)' but does not use the HRESULT or error code that the method returns. This could lead to unexpected behavior in error conditions or low-resource situations. Use the result in a conditional statement, assign the result to a variable, or pass it as an argument to another method.

If I try to use the exception value or do catch(...) the warning still appears. If I catch managed exceptions instead or compile in Debug I don't get the warning.

Why do I get this warning?

UPDATE

I've decided to open a bug report on Microsoft Connect.

A: 

Could be because you didn't call any code that could throw.

DeadMG
-1. As I've written, this is the reduced version of the original code. In any event, this warning has nothing to do with the fact there is no code that could throw.
brickner
A: 

This is a Visual Studio 2010 bug.

As you can see in the bug report, Microsoft reproduced the bug and has decided to postpone the resolution with no workaround.

You are welcome to vote for the bug so maybe Microsoft will decide to resolve it sooner.

brickner