https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95832
Bug ID: 95832 Summary: std::vector<bool> specialization leading std::variant ctor treating it as int rather than bool Product: gcc Version: 10.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: fiesh at zefix dot tv Target Milestone: --- The following code returned 1 when compiled with gcc-9 but returns 0 with gcc-10. Since clang exhibits the exact same behavior depending on the installed gcc version, I suppose it might be because of libstdc++. It's worth noting that MSVC on godbolt also returns 0. My primitive reading skills suggest to me that http://eel.is/c++draft/variant#ctor-14 says it should be 1. (Overload resolution works correctly in that it prefers an f(bool) over an f(int) when passed b.back().) #include <vector> #include <variant> using T = std::variant<int, bool>; int main() { std::vector<bool> b{false}; std::vector<T> ts; ts.emplace_back(b.back()); return ts.back().index(); }