https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87027
Bug ID: 87027 Summary: lower_bound returns erroneous result, 32 bit Product: gcc Version: 6.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: lists at sagnix dot eu Target Milestone: --- The program below outputs 2: /usr/bin/g++ -m32 -std=c++14 ex.cpp && ./a.out Vector maximal size: 4294967295 and actual size: 2415919104 Found value 2 It should output 3 or throw std::length_error. See also https://stackoverflow.com/questions/51907247/lower-bound-algorithm-stl-usage-preconditions/51910011#51910011 // compile with -m32 switch #include<algorithm> #include<iostream> #include<stdexcept> #include<vector> using namespace std; int main() { try { vector<uint8_t> v((1ULL << 28) * 9, 2); // 2.25 G entries v.back() = 3; // the last of which is greater cout<< "Vector maximal size: "<<v.max_size()<< " and actual size: " << v.size() <<endl; uint8_t val=3; auto x= lower_bound(v.begin(), v.end(), val ); if (x!=v.end() && !( val< *x ) ) { cout << "Found value " << int(*x) << endl; } else { cout << "Not Found " << endl; } } catch (exception const & ex){ cerr<< ex.what()<<endl; } } //---------- $ /usr/bin/g++ --version g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.