100db7afdSDavid E. O'Brien // Components for manipulating sequences of characters -*- C++ -*- 200db7afdSDavid E. O'Brien 3*f8a1b7d9SAlexander Kabaev // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 400db7afdSDavid E. O'Brien // Free Software Foundation, Inc. 500db7afdSDavid E. O'Brien // 600db7afdSDavid E. O'Brien // This file is part of the GNU ISO C++ Library. This library is free 700db7afdSDavid E. O'Brien // software; you can redistribute it and/or modify it under the 800db7afdSDavid E. O'Brien // terms of the GNU General Public License as published by the 900db7afdSDavid E. O'Brien // Free Software Foundation; either version 2, or (at your option) 1000db7afdSDavid E. O'Brien // any later version. 1100db7afdSDavid E. O'Brien 1200db7afdSDavid E. O'Brien // This library is distributed in the hope that it will be useful, 1300db7afdSDavid E. O'Brien // but WITHOUT ANY WARRANTY; without even the implied warranty of 1400db7afdSDavid E. O'Brien // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1500db7afdSDavid E. O'Brien // GNU General Public License for more details. 1600db7afdSDavid E. O'Brien 1700db7afdSDavid E. O'Brien // You should have received a copy of the GNU General Public License along 1800db7afdSDavid E. O'Brien // with this library; see the file COPYING. If not, write to the Free 19*f8a1b7d9SAlexander Kabaev // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 2000db7afdSDavid E. O'Brien // USA. 2100db7afdSDavid E. O'Brien 2200db7afdSDavid E. O'Brien // As a special exception, you may use this file as part of a free software 2300db7afdSDavid E. O'Brien // library without restriction. Specifically, if other files instantiate 2400db7afdSDavid E. O'Brien // templates or use macros or inline functions from this file, or you compile 258f1134fbSDavid E. O'Brien // this file and link it with other files to produce an executable, this 268f1134fbSDavid E. O'Brien // file does not by itself cause the resulting executable to be covered by 2700db7afdSDavid E. O'Brien // the GNU General Public License. This exception does not however 2800db7afdSDavid E. O'Brien // invalidate any other reasons why the executable file might be covered by 2900db7afdSDavid E. O'Brien // the GNU General Public License. 3000db7afdSDavid E. O'Brien 3100db7afdSDavid E. O'Brien // 3200db7afdSDavid E. O'Brien // ISO C++ 14882: 21 Strings library 3300db7afdSDavid E. O'Brien // 3400db7afdSDavid E. O'Brien 3500db7afdSDavid E. O'Brien // Written by Jason Merrill based upon the specification by Takanori Adachi 3600db7afdSDavid E. O'Brien // in ANSI X3J16/94-0013R2. Rewritten by Nathan Myers. 3700db7afdSDavid E. O'Brien 3800db7afdSDavid E. O'Brien #include <string> 3900db7afdSDavid E. O'Brien 4000db7afdSDavid E. O'Brien // Instantiation configuration. 4100db7afdSDavid E. O'Brien #ifndef C 4200db7afdSDavid E. O'Brien # define C char 4300db7afdSDavid E. O'Brien #endif 4400db7afdSDavid E. O'Brien 45*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(std) 46*f8a1b7d9SAlexander Kabaev 4700db7afdSDavid E. O'Brien typedef basic_string<C> S; 4800db7afdSDavid E. O'Brien 4900db7afdSDavid E. O'Brien template class basic_string<C>; 5000db7afdSDavid E. O'Brien template S operator+(const C*, const S&); 5100db7afdSDavid E. O'Brien template S operator+(C, const S&); 528f1134fbSDavid E. O'Brien template S operator+(const S&, const S&); 5300db7afdSDavid E. O'Brien 5400db7afdSDavid E. O'Brien // Only one template keyword allowed here. 5500db7afdSDavid E. O'Brien // See core issue #46 (NAD) 5600db7afdSDavid E. O'Brien // http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_closed.html#46 5700db7afdSDavid E. O'Brien template 5800db7afdSDavid E. O'Brien S::basic_string(C*, C*, const allocator<C>&); 5900db7afdSDavid E. O'Brien 6000db7afdSDavid E. O'Brien template 6100db7afdSDavid E. O'Brien S::basic_string(const C*, const C*, const allocator<C>&); 6200db7afdSDavid E. O'Brien 6300db7afdSDavid E. O'Brien template 6400db7afdSDavid E. O'Brien S::basic_string(S::iterator, S::iterator, const allocator<C>&); 6500db7afdSDavid E. O'Brien 6600db7afdSDavid E. O'Brien template 6700db7afdSDavid E. O'Brien C* 6800db7afdSDavid E. O'Brien S::_S_construct(S::iterator, S::iterator, 6900db7afdSDavid E. O'Brien const allocator<C>&, forward_iterator_tag); 7000db7afdSDavid E. O'Brien 7100db7afdSDavid E. O'Brien template 7200db7afdSDavid E. O'Brien C* 7300db7afdSDavid E. O'Brien S::_S_construct(C*, C*, const allocator<C>&, forward_iterator_tag); 7400db7afdSDavid E. O'Brien 7500db7afdSDavid E. O'Brien template 7600db7afdSDavid E. O'Brien C* 7700db7afdSDavid E. O'Brien S::_S_construct(const C*, const C*, const allocator<C>&, 7800db7afdSDavid E. O'Brien forward_iterator_tag); 79ffeaf689SAlexander Kabaev 80*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE 81*f8a1b7d9SAlexander Kabaev 82*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) 83*f8a1b7d9SAlexander Kabaev 84ffeaf689SAlexander Kabaev using std::S; 85ffeaf689SAlexander Kabaev template bool operator==(const S::iterator&, const S::iterator&); 86ffeaf689SAlexander Kabaev template bool operator==(const S::const_iterator&, const S::const_iterator&); 87*f8a1b7d9SAlexander Kabaev 88*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE 89