2

Boost.Variant、 classに220個の「到達不能コード」警告がありますboost::detail::variant::invoke_visitor:

template <typename T>
result_type internal_visit(T& operand, int)
{
    return visitor_(operand);
}

.

boost_1_50_0\boost\variant\variant.hpp(859): warning C4702: unreachable code

ラインreturn visitor_(operand);

まず第一に、この単純な 1 行の関数に到達できないコードが含まれている可能性があるのはなぜでしょうか? 到達できないコードはどれですか?

単純なケースではこの警告を再現できません。原因が正確にわからないためです。operator==で使用されるクラスに実装した後に警告が表示されましたboost::variant

環境: VC++ 2010、Boost 1.50

編集:

警告は、リリース ビルド (最適化) でのみ発生し、boost::variants を比較した場合にのみ発生します。boost::variantプリミティブ型とカスタム型で使用します。カスタム型は、典型的なbool operator(CT const& lh, CT const& rh)フリー関数として実装されます。

4

2 に答える 2

0

他の誰かが同じことにつまずいた場合に備えて: (MSVS 2017 v15.7.4 でこれを経験しました)

class Widget
{
public:
    void bar()
    {
        foo = 0; // C4702 here
    }

    void foobar()
    {
        return; // NOTE direct return here
        bar();
    }

private:
    int foo;
};

これは古いコードで、誰かが関数全体を「コメントアウト」してfoobar()、元のコードを「将来の参照」用に残していました。(はい、ソース管理は非常に使いにくいです)

リリース モードでは、コンパイラbar()は C4702: unreachable code という警告が発生する関数をインライン化しましたが、bar()何も問題がないように見える関数の最初の行を示していました。return;(実際には、警告をトリガーした後のコードの各行)

于 2018-09-13T10:35:36.420 に答える