// RUN: %clang_cc1 -fsyntax-only -verify %s // -- prvalue of arithmetic bool b = !0; bool b2 = !1.2; //expected-warning{{implicit conversion from 'double' to 'bool' changes value from 1.2 to true}} bool b3 = !4; // -- unscoped enumeration enum { E, F }; bool b4 = !E; bool b5 = !F; // -- pointer, bool b6 = !&b4; // expected-warning{{address of 'b4' will always evaluate to 'true'}} void f(); bool b61 = !&f; // -- or pointer to member type can be converted to a prvalue of type bool. struct S { void f() { } }; bool b7 = !&S::f; bool b8 = !S(); //expected-error {{invalid argument type 'S'}} namespace PR8181 { bool f() { } // expected-note{{possible target for call}} void f(char) { } // expected-note{{possible target for call}} bool b = !&f; //expected-error {{reference to overloaded function could not be resolved; did you mean to call it with no arguments?}} }