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