13f83d0de1d14f73c4c9acad76990385905e4b660Richard Smith// RUN: %clang_cc1 -std=c++11 -verify -fsyntax-only %s
23f83d0de1d14f73c4c9acad76990385905e4b660Richard Smith
33f83d0de1d14f73c4c9acad76990385905e4b660Richard Smithstruct S {
43f83d0de1d14f73c4c9acad76990385905e4b660Richard Smith  constexpr S(bool b) : b(b) {}
5840462670ba7a6bc26265a2306b35f2f0f01f51cRichard Smith  constexpr explicit operator bool() const { return b; }
63f83d0de1d14f73c4c9acad76990385905e4b660Richard Smith  bool b;
73f83d0de1d14f73c4c9acad76990385905e4b660Richard Smith};
83f83d0de1d14f73c4c9acad76990385905e4b660Richard Smithstruct T {
9840462670ba7a6bc26265a2306b35f2f0f01f51cRichard Smith  constexpr operator int() const { return 1; }
103f83d0de1d14f73c4c9acad76990385905e4b660Richard Smith};
113f83d0de1d14f73c4c9acad76990385905e4b660Richard Smithstruct U {
12840462670ba7a6bc26265a2306b35f2f0f01f51cRichard Smith  constexpr operator int() const { return 1; } // expected-note {{candidate}}
13840462670ba7a6bc26265a2306b35f2f0f01f51cRichard Smith  constexpr operator long() const { return 0; } // expected-note {{candidate}}
143f83d0de1d14f73c4c9acad76990385905e4b660Richard Smith};
153f83d0de1d14f73c4c9acad76990385905e4b660Richard Smith
163f83d0de1d14f73c4c9acad76990385905e4b660Richard Smithstatic_assert(S(true), "");
173f83d0de1d14f73c4c9acad76990385905e4b660Richard Smithstatic_assert(S(false), "not so fast"); // expected-error {{not so fast}}
183f83d0de1d14f73c4c9acad76990385905e4b660Richard Smithstatic_assert(T(), "");
193f83d0de1d14f73c4c9acad76990385905e4b660Richard Smithstatic_assert(U(), ""); // expected-error {{ambiguous}}
200cc323c6bed7206f9743a9775ec8d9cb90655f9cRichard Smith
210cc323c6bed7206f9743a9775ec8d9cb90655f9cRichard Smithstatic_assert(false, L"\x14hi" "!" R"x(")x"); // expected-error {{static_assert failed L"\024hi!\""}}
22