https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119075
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- You can construct a contrived testcase that fails the same way due to the _Bit_reference(_Bit_type*, _Bit_type) constructor: #include <vector> #include <type_traits> struct X { X(int, int) { } }; int test2(std::vector<bool>::reference); void test2(X); static_assert(std::is_same<decltype(test2({0,0})), void>::value, ""); This is ambiguous for the same reason. But we can't remove all private constructors, we need to be able to construct it.