https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106758
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- But clang does reject this: struct tuple1 { int a; }; struct tuple3 { tuple1 a0; float b0; }; void bar1(tuple3 tuple) {} template <typename T> concept test_expression = requires(T value) { bar1({{12}, value}); }; template <test_expression T> void foo(T&&) {} int main(int argc, char** argv) { // The following is a valid expression that compiles in GCC and Clang. // bar1({{12}, 12}); // This concept fails in GCC (but not Clang). foo(12); return 0; } So this might be a bug in clang for tuple case ...