Given struct MyBool { MyBool(bool b = false) {} operator bool() const { return false; } }; int main() { MyBool mb; bool result = true ? false : mb; return 0; } C:\dev\tmp>cl /c main.cpp Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24325.6 for x86 Copyright (C) Microsoft Corporation. All rights reserved. main.cpp C:\dev\tmp>"c:\dev\src\llvm\build\Release\msbuild-bin\cl.exe" /c main.cpp main.cpp(11,21): error: conditional expression is ambiguous; 'bool' can be converted to 'MyBool' and vice versa bool result = true ? false : mb; ^ ~~~~~ ~~ 1 error generated. It could be considered to match the behavior of cl.exe
I'm not a language lawyer, but I suspect this example isn't valid C++. If that's the case, and if it's not occurring in MS's headers (i.e. code that can't be fixed), I don't think we clang to change here.