// 2001-12-28 Phil Edwards <pme@gcc.gnu.org>//// Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc.//// This file is part of the GNU ISO C++ Library. This library is free// software; you can redistribute it and/or modify it under the// terms of the GNU General Public License as published by the// Free Software Foundation; either version 2, or (at your option)// any later version.//// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License along// with this library; see the file COPYING. If not, write to the Free// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,// USA.// Concept checking must remain sane.// { dg-options "-D_GLIBCXX_CONCEPT_CHECKS" }#include <vector>#include <string>#include <algorithm>#include <testsuite_hooks.h>using namespace std;// PR libstdc++/2054 and follow-up discussionstruct indirectCompare{indirectCompare(const vector<string>& v) : V(v) {}bool operator()( int x, int y) const{return V[x] < V[y];}bool operator()( int x, const string& a) const{return V[x] < a;}bool operator()( const string& a, int x) const{return V[x] < a;}const vector<string>& V;};voidtest2054( ){const int Maxi = 1022;vector<string> Words(Maxi);vector<int> Index(Maxi);for(size_t i = 0; i < Index.size(); i++)Index[i] = i;indirectCompare aComparison(Words);sort(Index.begin(), Index.end(), aComparison);string SearchTerm;lower_bound(Index.begin(), Index.end(), SearchTerm, aComparison);upper_bound(Index.begin(), Index.end(), SearchTerm, aComparison);equal_range(Index.begin(), Index.end(), SearchTerm, aComparison);binary_search(Index.begin(), Index.end(), SearchTerm, aComparison);}int main(){test2054();return 0;}