https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113007
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- #include <variant> int main() { int i = 42; std::monostate x_0[] = { i }; bool x_1[] = { i }; long long x_2[] = { i }; double x_3[] = { i }; } var.cc: In function ‘int main()’: var.cc:6:30: error: initializer for ‘std::monostate’ must be brace-enclosed 6 | std::monostate x_0[] = { i }; | ^ var.cc:7:18: warning: narrowing conversion of ‘i’ from ‘int’ to ‘bool’ [-Wnarrowing] 7 | bool x_1[] = { i }; | ^ var.cc:9:20: warning: narrowing conversion of ‘i’ from ‘int’ to ‘double’ [-Wnarrowing] 9 | double x_3[] = { i }; | ^ Narrowing conversions are hard errors in SFINAE contexts, even though they're just a warning in other contexts. Only x_2 is well-formed, and so the overload set is just F(int64_t).