1
我正在使用VS2008並剛剛從boost 1.51更改爲1.61。不幸的是升壓決定改變boost::optional<T>
,並從可選投下面bool的明確,即該段不再有效boost :: optional已更改隱式函數
boost::optional<TYPE> optType;
TYPE t = default;
if (optType)
t = optType;
您必須顯式轉換optType
到bool
,使這項工作。
更不幸的是,這仍然編譯(與錯誤的結果c),我無法檢測到它在哪裏使用。有沒有人知道任何(甚至侵入式)方法來檢測這些地方。
我試圖標記隱式強制轉換爲boost 1.51 hpp文件中的棄用,但由於某些原因,編譯器不顯示任何警告。
我必須查看的代碼量是幾十萬行,這就是爲什麼我需要這樣做。
沒有在上面的代碼'explicit'沒有問題。也許顯式轉換爲你使用的布爾除了'operator bool'之外的其他東西。 –
是的,''顯式運算符bool()'需要在'if'條件下工作。如果它不起作用,那麼它就不會編譯,所以_「更不幸的是,它仍然編譯(錯誤的結果是c)」_沒有意義。請提供完整的代碼來顯示問題(最好不要濫用關鍵字'default'!) –
IIRC,VS2008不支持轉換運算符上的'explicit'。 Boost可能違約回到某種「安全布爾」。要查看運算符最終的樣子,可以查看轉儲預處理文件(基於某種MCVE) - 然後在boost源文件中對其進行註釋。 – Niall