2016-08-02 6 views
1

私はVS2008を使用しており、boost 1.51から1.61に変更しました。残念ながら、ブーストがboost::optional<T>を変更し、明示的なBOOLするには、オプションからキャストを作ることにした、すなわち、以下のスニペットは、あなたがこの作品を作るためにbooloptTypeを明示的にキャストする必要があり、もうboost :: optionalは暗黙の関数を変更しました

boost::optional<TYPE> optType; 
TYPE t = default; 
if (optType) 
    t = optType; 

有効ではありません。

これはまだ(誤った結果ofcで)まだコンパイルされており、使用されている場所を検出できません。誰もがそれらの場所を検出するための(侵入的な)方法を知っていますか?

私は、boost1.51 hpp-fileで非推奨の暗黙のキャストをマークしようとしましたが、何らかの理由でコンパイラが警告を表示しません。

私が見なければならないコードの量は数十万行であり、私はこれを必要としています。あなたの特定のスニペットで

+5

に上記のコードでは、 'explicit'に問題がないことができます。おそらく、あなたが使用するブールへの明示的な変換は 'operator bool'以外の何かを行います。 –

+5

うまくいけば、 '明示的な演算子bool()'は 'if'条件で動作する必要があります。それがうまくいかなかったら、それはコンパイルされないでしょう。_ "さらに残念なのは、これが(まだ間違った結果を伴って)コンパイルされているということです。" _意味がありません。問題を示す完全なコードを入力してください(望ましくはキーワード 'default'を悪用することなく!) –

+1

IIRC、VS2008は変換演算子で' explicit'をサポートしていません。 Boostは、おそらく何らかの種類の「安全なブール」にデフォルト設定されています。オペレータが最終的にどのように見えるかを見るには、事前処理されたファイルを(MCVEに基づいて)何らかの形でダンプしてから、ブーストソースに注釈を付けることができます。 – Niall

答えて

1

、あなたは単にしかし、あなたはTYPE値を取得することを意味しましたか?

boost::optional<TYPE> optType; 
TYPE t = default; 
if (optType) 
    t = true; 

を書くことができ

if (optType) 
    t = *optType; 

あなたは、単に

t = optType.get_value_or(default);