if(cond)
のコンパイルは通るが、 if(cond == true)
と書くとコンパイルが通らない例がある。
struct bool_ { bool value; constexpr explicit operator bool() const noexcept { return value; } }; int main() { bool_ x{true}; if (x == true) { // do something } }
http://melpon.org/wandbox/permlink/jCXG8WMDTBLhvWI2
C++03 でも operator== のオーバーロードで似た問題が起きるケースが有ったが、 C++11 で explicit operator bool が登場し、広く使われるようになったことで、この問題に遭遇する機会が増えている。
魔黒などを使う場合には注意が必要だ。