Следующий код C ++, компилируется без предупреждения в Visual Studio 2010:
extern void callFunc( int, int );
struct str_wrapper
{
str_wrapper();
};
extern bool tryParseInt( const str_wrapper& str, int& outValue );
void test()
{
int x, y;
if ( tryParseInt( str_wrapper(), x ) && tryParseInt( str_wrapper(), y ) )
{
// No warning generated
callFunc( x, y );
}
}
Однако, если str_wrapper имеет определяемый пользователем деструктор, код генерирует предупреждение в строке callFunc (x, y):
<code>
extern void callFunc( int, int );</p>
<p>struct str_wrapper
{
str_wrapper();
~str_wrapper(); ///< Causes warning C4701 below
};</p>
<p>extern bool tryParseInt( const str_wrapper& str, int& outValue );</p>
<p>void test()
{
int x, y;
if ( tryParseInt( str_wrapper(), x ) && tryParseInt( str_wrapper(), y ) )
{
// C4701 generated for following line
callFunc( x, y );
}
}
Я был бы рад, если бы оба примера генерировали предупреждение, или если ни одинПример сгенерировал предупреждение.Я пропускаю какое-то неясное правило C ++ или это ошибка компилятора?