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 が登場し、広く使われるようになったことで、この問題に遭遇する機会が増えている。 魔黒などを使う場合