按照BitmaskType
理念,實現必須保證下面的語句是很好formend:(在§17.5.2.1.3.4上市)比較BitmaskType與零的正確方法?
The value Y is set in the object X if the expression X & Y is nonzero.
,其中X和Y是概念型BitmaskType
的。
當您嘗試以下簡單的代碼片段用gcc 4.7我得到模板扣錯誤:
#include <future>
int main() {
(std::launch::async & std::launch::async) != 0;
}
錯誤:
error: no match for 'operator!=' in '(std::launch)1 != 0'
... followed by tons of deduction errors
這是海灣合作委員會中的錯誤還是我剛開了什麼在這裏?如果是,那麼執行這種檢查的正確方法是什麼?
我已經檢查過gcc的bug列表,但找不到涵蓋這個主題的任何內容。
好的,謝謝,看起來不錯。是的,我忘了在代碼中複製時添加大括號。 'std :: launch()'保證始終滿足上面提到的要求嗎? – inf
我會這樣想的。追逐它的方法是查看枚舉的默認初始化意味着什麼。我很確定它變成零初始化,但我現在還沒有追趕它。 –
這是值初始化,而不是默認初始化,標量和枚舉類型的值初始化始終爲零初始化。 – ildjarn