================ @@ -6,20 +6,20 @@ struct A { }; static_assert(A{1, 2, 3, 4, 5} == A{1, 2, 3, 4, 5}); -static_assert(A{1, 2, 3, 4, 5} == A{0, 2, 3, 4, 5}); // expected-error {{failed}} -static_assert(A{1, 2, 3, 4, 5} == A{1, 0, 3, 4, 5}); // expected-error {{failed}} -static_assert(A{1, 2, 3, 4, 5} == A{1, 2, 0, 4, 5}); // expected-error {{failed}} -static_assert(A{1, 2, 3, 4, 5} == A{1, 2, 3, 0, 5}); // expected-error {{failed}} -static_assert(A{1, 2, 3, 4, 5} == A{1, 2, 3, 4, 0}); // expected-error {{failed}} +static_assert(A{1, 2, 3, 4, 5} == A{0, 2, 3, 4, 5}); // expected-error {{failed}} expected-note {{evaluates to}} ---------------- sethp wrote:
I can, though I was worried it'd over-specify advisory output to do so. What do you think about waiting until we reached loose consensus around the format for printing the struct? If you're looking for a sample here's a snippet of output from my `build/bin/clang clang/test/CXX/class/class.compare/class.eq/p3.cpp` : ``` clang/test/CXX/class/class.compare/class.eq/p3.cpp:9:15: error: static assertion failed due to requirement 'A{1, 2, 3, 4, 5} == A{0, 2, 3, 4, 5}' 9 | static_assert(A{1, 2, 3, 4, 5} == A{0, 2, 3, 4, 5}); // expected-error {{failed}} expected-note {{evaluates to}} | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ clang/test/CXX/class/class.compare/class.eq/p3.cpp:9:32: note: expression evaluates to '{1, {2, 3, 4}, 5} == {0, {2, 3, 4}, 5}' 9 | static_assert(A{1, 2, 3, 4, 5} == A{0, 2, 3, 4, 5}); // expected-error {{failed}} expected-note {{evaluates to}} | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~ clang/test/CXX/class/class.compare/class.eq/p3.cpp:10:15: error: static assertion failed due to requirement 'A{1, 2, 3, 4, 5} == A{1, 0, 3, 4, 5}' 10 | static_assert(A{1, 2, 3, 4, 5} == A{1, 0, 3, 4, 5}); // expected-error {{failed}} expected-note {{evaluates to}} | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ clang/test/CXX/class/class.compare/class.eq/p3.cpp:10:32: note: expression evaluates to '{1, {2, 3, 4}, 5} == {1, {0, 3, 4}, 5}' 10 | static_assert(A{1, 2, 3, 4, 5} == A{1, 0, 3, 4, 5}); // expected-error {{failed}} expected-note {{evaluates to}} ``` That's for: ```c++ struct A { int a, b[3], c; bool operator==(const A&) const = default; }; ``` Which, to my eye, is a strict improvement over the only alternative (without this patch) that I see to get diagnostics: ```c++ // instead of static_assert(A{1, 2, 3, 4, 5} == A{0, 2, 3, 4, 5}); constexpr A lhs = {1, 2, 3, 4, 5}; constexpr A rhs = {0, 2, 3, 4, 5}; static_assert(lhs.a == rhs.a); static_assert(lhs.b[0] == rhs.b[0]); static_assert(lhs.b[1] == rhs.b[1]); static_assert(lhs.b[2] == rhs.b[2]); static_assert(lhs.c == rhs.c); ``` https://github.com/llvm/llvm-project/pull/74852 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits