This is the mail archive of the
libstdc++@sourceware.cygnus.com
mailing list for the libstdc++ project.
[patch] new string instantiations
- To: libstdc++ at sourceware dot cygnus dot com
- Subject: [patch] new string instantiations
- From: ncm at cantrip dot org
- Date: Tue, 18 Apr 2000 03:44:03 -0700
- Reply-To: libstdc++ at sourceware dot cygnus dot com
I have rewritten src/string-inst.cc so that it instantiates
the non-inline members of basic_string<char> and -<wchar_t>,
rather than (as it had done) uselessly instantiating mainly
inline members. It also no longer also instantiates *everything*
into stringMAIN.lo, in addition to the individual instantiations
in other object files.
Patch follows. I'm not certain how to get the Makefile.am to
generate the correct Makefile.in (assigning the libstdc___la_OBJECTS
variable members), as manually patched into it below.
Note that the two lines commented out under '#ifdef MAIN' in
src/string-inst.cc, if uncommented, cause an "internal error"
in yesterday's compiler.
Before using this, it is advisable to do "rm src/{w,}string[A-Z]*.cc"
in the libstdc++-v3 directory. I'm hoping those source files won't
be there after the move this "afternoon".
Nathan Myers
ncm@cantrip.org
------
Index: Makefile.am
===================================================================
RCS file: /cvs/libstdc++/libstdc++/src/Makefile.am,v
retrieving revision 1.91
diff -u -r1.91 Makefile.am
--- Makefile.am 2000/04/06 08:37:31 1.91
+++ Makefile.am 2000/04/18 10:21:29
@@ -162,23 +162,7 @@
complex.cc complexf.cc complexl.cc complex_io.cc \
stdexcept.cc ios.cc stdstreams.cc strstream.cc \
locale.cc localename.cc \
- locale-inst.cc stl-inst.cc misc-inst.cc valarray-inst.cc \
- stringADDCS.cc stringADDPS.cc stringADDSC.cc stringADDSP.cc \
- stringADDSS.cc stringBIST.cc stringBOST.cc stringCHTR.cc \
- stringEQPS.cc stringEQSP.cc stringEQSS.cc stringEXTRA.cc \
- stringGEPS.cc stringGESP.cc stringGESS.cc stringGETLI.cc \
- stringGTPS.cc stringGTSP.cc stringGTSS.cc stringINSER.cc \
- stringLEPS.cc stringLESP.cc stringLESS.cc stringLTPS.cc \
- stringLTSP.cc stringLTSS.cc stringMAIN.cc stringNEPS.cc \
- stringNESP.cc stringNESS.cc stringSCOPY.cc \
- wstringADDCS.cc wstringADDPS.cc wstringADDSC.cc wstringADDSP.cc \
- wstringADDSS.cc wstringBIST.cc wstringBOST.cc wstringCHTR.cc \
- wstringEQPS.cc wstringEQSP.cc wstringEQSS.cc wstringEXTRA.cc \
- wstringGEPS.cc wstringGESP.cc wstringGESS.cc wstringGETLI.cc \
- wstringGTPS.cc wstringGTSP.cc wstringGTSS.cc wstringINSER.cc \
- wstringLEPS.cc wstringLESP.cc wstringLESS.cc wstringLTPS.cc \
- wstringLTSP.cc wstringLTSS.cc wstringMAIN.cc wstringNEPS.cc \
- wstringNESP.cc wstringNESS.cc wstringSCOPY.cc
+ locale-inst.cc stl-inst.cc misc-inst.cc valarray-inst.cc
VPATH += $(top_srcdir)/src
VPATH += $(top_srcdir) $(top_srcdir)/std $(top_srcdir)/stl
@@ -186,7 +170,7 @@
# Actual sources for the distro, but don't build these.
-EXTRA_sources = string-inst.cc wstring-inst.cc
+EXTRA_sources = string-inst.cc
libstdc___la_SOURCES = $(sources)
@@ -244,18 +228,125 @@
locale-inst.lo: locale-inst.cc
$(LTCXXCOMPILE) -fimplicit-templates -c $<
-
-# See <URL:http://sourceware.cygnus.com/ml/libstdc++/2000-q1/msg00426.html>.
-# The 2.95 inliner cannot inline a member function, and -Winline complains.
-# This must not be fatal when building under 2.95. (If 2.96+ ever becomes
-# /required/ for building, all of this can be removed.)
-stringMAIN.o: stringMAIN.cc
- $(CXXCOMPILE) @WERRORSUPPRESS@ -c $<
-stringMAIN.lo: stringMAIN.cc
- $(LTCXXCOMPILE) @WERRORSUPPRESS@ -c $<
-wstringMAIN.o: wstringMAIN.cc
- $(CXXCOMPILE) @WERRORSUPPRESS@ -c $<
-wstringMAIN.lo: wstringMAIN.cc
- $(LTCXXCOMPILE) @WERRORSUPPRESS@ -c $<
-
+stringMAIN.lo \
+stringCTORNC.lo \
+stringCTORCP.lo \
+stringCTORAL.lo \
+stringCTORCPR.lo \
+stringCTORCPRAL.lo \
+stringCTORPRAL.lo \
+stringCTORPAL.lo \
+stringCTORDUPAL.lo \
+stringCTORPP.lo \
+stringCTORII.lo \
+stringDESTROY.lo \
+stringLEAK.lo \
+stringMUTATE.lo \
+stringRESERVE.lo \
+stringSWAP.lo \
+stringSLOP.lo \
+stringCREATE.lo \
+stringCLONE.lo \
+stringRESIZE.lo \
+stringAPPCOPY.lo \
+stringAPPCPR.lo \
+stringAPPPR.lo \
+stringAPPDUP.lo \
+stringAPPII.lo \
+stringASSCP.lo \
+stringASSII.lo \
+stringINSII.lo \
+stringREPRR.lo \
+stringREPIIDUP.lo \
+stringREPII.lo \
+stringREPIII.lo \
+stringREP4I.lo \
+stringREPIIPP.lo \
+stringREPIIPP2.lo \
+stringCOPY.lo \
+stringCONII.lo \
+stringCONIIF.lo \
+stringCONPPF.lo \
+stringCONPPF2.lo \
+stringFIND.lo \
+stringFINDC.lo \
+stringRFIND.lo \
+stringRFINDC.lo \
+stringFFO.lo \
+stringFLO.lo \
+stringFFNO.lo \
+stringFLNO.lo \
+stringFLNOC.lo \
+stringCOMPARE.lo \
+stringCOMPARE2.lo \
+stringCOMPAREP.lo \
+stringCOMPAREP2.lo \
+stringADDPS.lo \
+stringADDCS.lo \
+stringEXTRACT.lo \
+stringINSERT.lo \
+stringGETLINE.lo \
+stringSCOPY.lo : string-inst.cc
+ $(LTCXXCOMPILE) -c -D`echo $@ | tr -dc 'A-Z'` $< -o $@
+
+wstringMAIN.lo \
+wstringCTORNC.lo \
+wstringCTORCP.lo \
+wstringCTORAL.lo \
+wstringCTORCPR.lo \
+wstringCTORCPRAL.lo \
+wstringCTORPRAL.lo \
+wstringCTORPAL.lo \
+wstringCTORDUPAL.lo \
+wstringCTORPP.lo \
+wstringCTORII.lo \
+wstringDESTROY.lo \
+wstringLEAK.lo \
+wstringMUTATE.lo \
+wstringRESERVE.lo \
+wstringSWAP.lo \
+wstringSLOP.lo \
+wstringCREATE.lo \
+wstringCLONE.lo \
+wstringRESIZE.lo \
+wstringAPPCOPY.lo \
+wstringAPPCPR.lo \
+wstringAPPPR.lo \
+wstringAPPDUP.lo \
+wstringAPPII.lo \
+wstringASSCP.lo \
+wstringASSII.lo \
+wstringINSII.lo \
+wstringREPRR.lo \
+wstringREPIIDUP.lo \
+wstringREPII.lo \
+wstringREPIII.lo \
+wstringREP4I.lo \
+wstringREPIIPP.lo \
+wstringREPIIPP2.lo \
+wstringCOPY.lo \
+wstringCONII.lo \
+wstringCONIIF.lo \
+wstringCONPPF.lo \
+wstringCONPPF2.lo \
+wstringFIND.lo \
+wstringFINDC.lo \
+wstringRFIND.lo \
+wstringRFINDC.lo \
+wstringFFO.lo \
+wstringFLO.lo \
+wstringFFNO.lo \
+wstringFLNO.lo \
+wstringFLNOC.lo \
+wstringCOMPARE.lo \
+wstringCOMPARE2.lo \
+wstringCOMPAREP.lo \
+wstringCOMPAREP2.lo \
+wstringADDPS.lo \
+wstringADDCS.lo \
+wstringEXTRACT.lo \
+wstringINSERT.lo \
+wstringGETLINE.lo \
+wstringSCOPY.lo : string-inst.cc
+ $(LTCXXCOMPILE) -c -D`echo $@ | tr -dc 'A-Z'` -DC=wchar_t $< -o $@
Index: Makefile.in
===================================================================
RCS file: /cvs/libstdc++/libstdc++/src/Makefile.in,v
retrieving revision 1.102
diff -u -r1.102 Makefile.in
--- Makefile.in 2000/04/06 08:37:31 1.102
+++ Makefile.in 2000/04/18 10:21:47
@@ -241,28 +241,11 @@
complex.cc complexf.cc complexl.cc complex_io.cc \
stdexcept.cc ios.cc stdstreams.cc strstream.cc \
locale.cc localename.cc \
- locale-inst.cc stl-inst.cc misc-inst.cc valarray-inst.cc \
- stringADDCS.cc stringADDPS.cc stringADDSC.cc stringADDSP.cc \
- stringADDSS.cc stringBIST.cc stringBOST.cc stringCHTR.cc \
- stringEQPS.cc stringEQSP.cc stringEQSS.cc stringEXTRA.cc \
- stringGEPS.cc stringGESP.cc stringGESS.cc stringGETLI.cc \
- stringGTPS.cc stringGTSP.cc stringGTSS.cc stringINSER.cc \
- stringLEPS.cc stringLESP.cc stringLESS.cc stringLTPS.cc \
- stringLTSP.cc stringLTSS.cc stringMAIN.cc stringNEPS.cc \
- stringNESP.cc stringNESS.cc stringSCOPY.cc \
- wstringADDCS.cc wstringADDPS.cc wstringADDSC.cc wstringADDSP.cc \
- wstringADDSS.cc wstringBIST.cc wstringBOST.cc wstringCHTR.cc \
- wstringEQPS.cc wstringEQSP.cc wstringEQSS.cc wstringEXTRA.cc \
- wstringGEPS.cc wstringGESP.cc wstringGESS.cc wstringGETLI.cc \
- wstringGTPS.cc wstringGTSP.cc wstringGTSS.cc wstringINSER.cc \
- wstringLEPS.cc wstringLESP.cc wstringLESS.cc wstringLTPS.cc \
- wstringLTSP.cc wstringLTSS.cc wstringMAIN.cc wstringNEPS.cc \
- wstringNESP.cc wstringNESS.cc wstringSCOPY.cc
-
+ locale-inst.cc stl-inst.cc misc-inst.cc valarray-inst.cc
VPATH = $(top_srcdir)/src $(top_srcdir) $(top_srcdir)/std $(top_srcdir)/stl $(top_srcdir)/@ctype_include_dir@
# Actual sources for the distro, but don't build these.
-EXTRA_sources = string-inst.cc wstring-inst.cc
+EXTRA_sources = string-inst.cc
libstdc___la_SOURCES = $(sources)
@@ -288,21 +271,125 @@
libstdc___la_OBJECTS = limitsMEMBERS.lo c++io.lo cmath.lo complex.lo \
complexf.lo complexl.lo complex_io.lo stdexcept.lo ios.lo stdstreams.lo \
strstream.lo locale.lo localename.lo locale-inst.lo stl-inst.lo \
-misc-inst.lo valarray-inst.lo stringADDCS.lo stringADDPS.lo \
-stringADDSC.lo stringADDSP.lo stringADDSS.lo stringBIST.lo \
-stringBOST.lo stringCHTR.lo stringEQPS.lo stringEQSP.lo stringEQSS.lo \
-stringEXTRA.lo stringGEPS.lo stringGESP.lo stringGESS.lo stringGETLI.lo \
-stringGTPS.lo stringGTSP.lo stringGTSS.lo stringINSER.lo stringLEPS.lo \
-stringLESP.lo stringLESS.lo stringLTPS.lo stringLTSP.lo stringLTSS.lo \
-stringMAIN.lo stringNEPS.lo stringNESP.lo stringNESS.lo stringSCOPY.lo \
-wstringADDCS.lo wstringADDPS.lo wstringADDSC.lo wstringADDSP.lo \
-wstringADDSS.lo wstringBIST.lo wstringBOST.lo wstringCHTR.lo \
-wstringEQPS.lo wstringEQSP.lo wstringEQSS.lo wstringEXTRA.lo \
-wstringGEPS.lo wstringGESP.lo wstringGESS.lo wstringGETLI.lo \
-wstringGTPS.lo wstringGTSP.lo wstringGTSS.lo wstringINSER.lo \
-wstringLEPS.lo wstringLESP.lo wstringLESS.lo wstringLTPS.lo \
-wstringLTSP.lo wstringLTSS.lo wstringMAIN.lo wstringNEPS.lo \
-wstringNESP.lo wstringNESS.lo wstringSCOPY.lo
+misc-inst.lo valarray-inst.lo \
+stringMAIN.lo \
+stringCTORNC.lo \
+stringCTORCP.lo \
+stringCTORAL.lo \
+stringCTORCPR.lo \
+stringCTORCPRAL.lo \
+stringCTORPRAL.lo \
+stringCTORPAL.lo \
+stringCTORDUPAL.lo \
+stringCTORPP.lo \
+stringCTORII.lo \
+stringDESTROY.lo \
+stringLEAK.lo \
+stringMUTATE.lo \
+stringRESERVE.lo \
+stringSWAP.lo \
+stringSLOP.lo \
+stringCREATE.lo \
+stringCLONE.lo \
+stringRESIZE.lo \
+stringAPPCOPY.lo \
+stringAPPCPR.lo \
+stringAPPPR.lo \
+stringAPPDUP.lo \
+stringAPPII.lo \
+stringASSCP.lo \
+stringASSII.lo \
+stringINSII.lo \
+stringREPRR.lo \
+stringREPIIDUP.lo \
+stringREPII.lo \
+stringREPIII.lo \
+stringREP4I.lo \
+stringREPIIPP.lo \
+stringREPIIPP2.lo \
+stringCOPY.lo \
+stringCONII.lo \
+stringCONIIF.lo \
+stringCONPPF.lo \
+stringCONPPF2.lo \
+stringFIND.lo \
+stringFINDC.lo \
+stringRFIND.lo \
+stringRFINDC.lo \
+stringFFO.lo \
+stringFLO.lo \
+stringFFNO.lo \
+stringFLNO.lo \
+stringFLNOC.lo \
+stringCOMPARE.lo \
+stringCOMPARE2.lo \
+stringCOMPAREP.lo \
+stringCOMPAREP2.lo \
+stringADDPS.lo \
+stringADDCS.lo \
+stringEXTRACT.lo \
+stringINSERT.lo \
+stringGETLINE.lo \
+stringSCOPY.lo \
+wstringMAIN.lo \
+wstringCTORNC.lo \
+wstringCTORCP.lo \
+wstringCTORAL.lo \
+wstringCTORCPR.lo \
+wstringCTORCPRAL.lo \
+wstringCTORPRAL.lo \
+wstringCTORPAL.lo \
+wstringCTORDUPAL.lo \
+wstringCTORPP.lo \
+wstringCTORII.lo \
+wstringDESTROY.lo \
+wstringLEAK.lo \
+wstringMUTATE.lo \
+wstringRESERVE.lo \
+wstringSWAP.lo \
+wstringSLOP.lo \
+wstringCREATE.lo \
+wstringCLONE.lo \
+wstringRESIZE.lo \
+wstringAPPCOPY.lo \
+wstringAPPCPR.lo \
+wstringAPPPR.lo \
+wstringAPPDUP.lo \
+wstringAPPII.lo \
+wstringASSCP.lo \
+wstringASSII.lo \
+wstringINSII.lo \
+wstringREPRR.lo \
+wstringREPIIDUP.lo \
+wstringREPII.lo \
+wstringREPIII.lo \
+wstringREP4I.lo \
+wstringREPIIPP.lo \
+wstringREPIIPP2.lo \
+wstringCOPY.lo \
+wstringCONII.lo \
+wstringCONIIF.lo \
+wstringCONPPF.lo \
+wstringCONPPF2.lo \
+wstringFIND.lo \
+wstringFINDC.lo \
+wstringRFIND.lo \
+wstringRFINDC.lo \
+wstringFFO.lo \
+wstringFLO.lo \
+wstringFFNO.lo \
+wstringFLNO.lo \
+wstringFLNOC.lo \
+wstringCOMPARE.lo \
+wstringCOMPARE2.lo \
+wstringCOMPAREP.lo \
+wstringCOMPAREP2.lo \
+wstringADDPS.lo \
+wstringADDCS.lo \
+wstringEXTRACT.lo \
+wstringINSERT.lo \
+wstringGETLINE.lo \
+wstringSCOPY.lo
CXXFLAGS = @CXXFLAGS@
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -566,18 +653,127 @@
locale-inst.lo: locale-inst.cc
$(LTCXXCOMPILE) -fimplicit-templates -c $<
-# See <URL:http://sourceware.cygnus.com/ml/libstdc++/2000-q1/msg00426.html>.
-# The 2.95 inliner cannot inline a member function, and -Winline complains.
-# This must not be fatal when building under 2.95. (If 2.96+ ever becomes
-# /required/ for building, all of this can be removed.)
-stringMAIN.o: stringMAIN.cc
- $(CXXCOMPILE) @WERRORSUPPRESS@ -c $<
-stringMAIN.lo: stringMAIN.cc
- $(LTCXXCOMPILE) @WERRORSUPPRESS@ -c $<
-wstringMAIN.o: wstringMAIN.cc
- $(CXXCOMPILE) @WERRORSUPPRESS@ -c $<
-wstringMAIN.lo: wstringMAIN.cc
- $(LTCXXCOMPILE) @WERRORSUPPRESS@ -c $<
+stringMAIN.lo \
+stringCTORNC.lo \
+stringCTORCP.lo \
+stringCTORAL.lo \
+stringCTORCPR.lo \
+stringCTORCPRAL.lo \
+stringCTORPRAL.lo \
+stringCTORPAL.lo \
+stringCTORDUPAL.lo \
+stringCTORPP.lo \
+stringCTORII.lo \
+stringDESTROY.lo \
+stringLEAK.lo \
+stringMUTATE.lo \
+stringRESERVE.lo \
+stringSWAP.lo \
+stringSLOP.lo \
+stringCREATE.lo \
+stringCLONE.lo \
+stringRESIZE.lo \
+stringAPPCOPY.lo \
+stringAPPCPR.lo \
+stringAPPPR.lo \
+stringAPPDUP.lo \
+stringAPPII.lo \
+stringASSCP.lo \
+stringASSII.lo \
+stringINSII.lo \
+stringREPRR.lo \
+stringREPIIDUP.lo \
+stringREPII.lo \
+stringREPIII.lo \
+stringREP4I.lo \
+stringREPIIPP.lo \
+stringREPIIPP2.lo \
+stringCOPY.lo \
+stringCONII.lo \
+stringCONIIF.lo \
+stringCONPPF.lo \
+stringCONPPF2.lo \
+stringFIND.lo \
+stringFINDC.lo \
+stringRFIND.lo \
+stringRFINDC.lo \
+stringFFO.lo \
+stringFLO.lo \
+stringFFNO.lo \
+stringFLNO.lo \
+stringFLNOC.lo \
+stringCOMPARE.lo \
+stringCOMPARE2.lo \
+stringCOMPAREP.lo \
+stringCOMPAREP2.lo \
+stringADDPS.lo \
+stringADDCS.lo \
+stringEXTRACT.lo \
+stringINSERT.lo \
+stringGETLINE.lo \
+stringSCOPY.lo : string-inst.cc
+ $(LTCXXCOMPILE) -c -D`echo $@ | tr -dc 'A-Z'` $< -o $@
+
+wstringMAIN.lo \
+wstringCTORNC.lo \
+wstringCTORCP.lo \
+wstringCTORAL.lo \
+wstringCTORCPR.lo \
+wstringCTORCPRAL.lo \
+wstringCTORPRAL.lo \
+wstringCTORPAL.lo \
+wstringCTORDUPAL.lo \
+wstringCTORPP.lo \
+wstringCTORII.lo \
+wstringDESTROY.lo \
+wstringLEAK.lo \
+wstringMUTATE.lo \
+wstringRESERVE.lo \
+wstringSWAP.lo \
+wstringSLOP.lo \
+wstringCREATE.lo \
+wstringCLONE.lo \
+wstringRESIZE.lo \
+wstringAPPCOPY.lo \
+wstringAPPCPR.lo \
+wstringAPPPR.lo \
+wstringAPPDUP.lo \
+wstringAPPII.lo \
+wstringASSCP.lo \
+wstringASSII.lo \
+wstringINSII.lo \
+wstringREPRR.lo \
+wstringREPIIDUP.lo \
+wstringREPII.lo \
+wstringREPIII.lo \
+wstringREP4I.lo \
+wstringREPIIPP.lo \
+wstringREPIIPP2.lo \
+wstringCOPY.lo \
+wstringCONII.lo \
+wstringCONIIF.lo \
+wstringCONPPF.lo \
+wstringCONPPF2.lo \
+wstringFIND.lo \
+wstringFINDC.lo \
+wstringRFIND.lo \
+wstringRFINDC.lo \
+wstringFFO.lo \
+wstringFLO.lo \
+wstringFFNO.lo \
+wstringFLNO.lo \
+wstringFLNOC.lo \
+wstringCOMPARE.lo \
+wstringCOMPARE2.lo \
+wstringCOMPAREP.lo \
+wstringCOMPAREP2.lo \
+wstringADDPS.lo \
+wstringADDCS.lo \
+wstringEXTRACT.lo \
+wstringINSERT.lo \
+wstringGETLINE.lo \
+wstringSCOPY.lo : string-inst.cc
+ $(LTCXXCOMPILE) -c -D`echo $@ | tr -dc 'A-Z'` -DC=wchar_t $< -o $@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
Index: string-inst.cc
===================================================================
RCS file: /cvs/libstdc++/libstdc++/src/string-inst.cc,v
retrieving revision 1.9
diff -u -r1.9 string-inst.cc
--- string-inst.cc 2000/03/21 06:24:06 1.9
+++ string-inst.cc 2000/04/18 10:21:47
@@ -32,7 +32,7 @@
//
// Written by Jason Merrill based upon the specification by Takanori Adachi
-// in ANSI X3J16/94-0013R2.
+// in ANSI X3J16/94-0013R2. Rewritten by Nathan Myers.
#include <bits/std_string.h>
#include <bits/std_algorithm.h>
@@ -55,106 +55,246 @@
{
typedef basic_string<C> S;
-// Do instantiate.
-#ifdef TRAITS
- template class char_traits<C>;
+#ifdef MAIN
+ template C S::_Rep::_S_terminal;
+// template S::size_type S::_S_max_size;
+// template S::allocator_type::size_type S::S_empty_rep_storage;
#endif
-#ifdef MAIN
- template class basic_string<C>;
+#ifdef CTORNC
+ template
+ S::basic_string(S::size_type, C, S::allocator_type const&);
+#endif
+
+#ifdef CTORCP
+ template
+ S::basic_string(S const&);
+#endif
+
+#ifdef CTORAL
+ template
+ S::basic_string(S::allocator_type const&);
+#endif
+
+#ifdef CTORCPR
+ template
+ S::basic_string(S const&, S::size_type, S::size_type);
+#endif
+
+#ifdef CTORCPRAL
+ template
+ S::basic_string(
+ S const&, S::size_type, S::size_type, S::allocator_type const&);
+#endif
+
+#ifdef CTORPRAL
+ template
+ S::basic_string(
+ C const*, S::size_type, S::allocator_type const&);
+#endif
- // Make sure string::iterators have binary operators.
- template bool operator==(const S::iterator&, const S::iterator&);
- template bool operator!=(const S::iterator&, const S::iterator&);
- template bool operator<(const S::iterator&, const S::iterator&);
- template bool operator<=(const S::iterator&, const S::iterator&);
- template bool operator>(const S::iterator&, const S::iterator&);
- template bool operator>=(const S::iterator&, const S::iterator&);
- template
- S::iterator
- operator+(S::iterator::difference_type, const S::iterator&);
-
- // Make sure string::const_iterators have binary operators.
- template bool operator==(const S::const_iterator&, const S::const_iterator&);
- template bool operator!=(const S::const_iterator&, const S::const_iterator&);
- template bool operator<(const S::const_iterator&, const S::const_iterator&);
- template bool operator<=(const S::const_iterator&, const S::const_iterator&);
- template bool operator>(const S::const_iterator&, const S::const_iterator&);
- template bool operator>=(const S::const_iterator&, const S::const_iterator&);
+#ifdef CTORPAL
template
- S::const_iterator
- operator+(S::const_iterator::difference_type, const S::const_iterator&);
+ S::basic_string(
+ C const*, S::allocator_type const&);
+#endif
+
+#ifdef CTORDUPAL
+ template
+ S::basic_string(
+ S::size_type, C, S::allocator_type const&);
+#endif
- // These member templates have to be explicitly instantiated.
+#ifdef CTORPP
template
S::basic_string
(C*, C*, const allocator<C>&);
+#endif
+#ifdef CTORII
template
S::basic_string
(S::iterator, S::iterator, const allocator<C>&);
+#endif
+
+#ifdef DESTROY
+ template
+ void S::_Rep::_M_destroy(S::allocator_type const&) throw();
+#endif
+#ifdef LEAK
+ template
+ void S::_M_leak_hard();
+#endif
+
+#ifdef MUTATE
+ template
+ void S::_M_mutate(S::size_type, S::size_type, S::size_type);
+#endif
+
+#ifdef RESERVE
+ template
+ void S::reserve(S::size_type);
+#endif
+
+#ifdef SWAP
+ template
+ void S::swap(S&);
+#endif
+
+#ifdef SLOP
+# ifdef _GLIBCPP_ALLOC_CONTROL
+ template
+ bool (* S::_Rep::_S_excess_slop)(size_t, size_t);
+ template
+ bool S::_Rep::_S_default_excess(size_t, size_t);
+# endif
+#endif
+
+#ifdef CREATE
+ template
+ S::_Rep* S::_Rep::_S_create(size_t, S::allocator_type const&);
+#endif
+
+#ifdef CLONE
+ template
+ C* S::_Rep::_M_clone(S::allocator_type const&, S::size_type);
+#endif
+
+#ifdef RESIZE
+ template
+ void S::resize(S::size_type, C);
+#endif
+
+#ifdef APPCOPY
+ template
+ S& S::append(S const&);
+#endif
+
+#ifdef APPCPR
+ template
+ S& S::append(S const&, S::size_type, S::size_type);
+#endif
+
+#ifdef APPPR
+ template
+ S& S::append(C const*, S::size_type);
+#endif
+
+#ifdef APPDUP
+ template
+ S& S::append(S::size_type, C);
+#endif
+
+#ifdef APPII
template
S&
S::append<S::iterator>
(S::iterator, S::iterator);
+#endif
+#ifdef ASSCP
+ template
+ S&
+ S::assign(S const&);
+#endif
+
+#ifdef ASSII
template
S&
S::assign<S::iterator>
(S::iterator, S::iterator);
+#endif
+#ifdef INSII
template
void
S::insert<S::iterator> //c*
(S::iterator, S::iterator, S::iterator); //it, c+, c+ and temptype = char*
+#endif
+
+#ifdef REPRR
+ template
+ S& S::replace(
+ S::size_type, S::size_type, S const&, S::size_type, S::size_type);
+#endif
+#ifdef REPIIDUP
template
+ S& S::replace(S::iterator, S::iterator, S::size_type, C);
+#endif
+
+#ifdef REPII
+ template
S&
S::replace<S::iterator> // c*
(S::iterator, S::iterator, S::iterator, S::iterator); //it, it, c+, c+
+#endif
+#ifdef REPIII
template
S&
S::_M_replace<S::iterator>
(S::iterator, S::iterator, S::iterator, S::iterator, forward_iterator_tag);
+#endif
+#ifdef REP4I
+ template
template
S&
S::_M_replace<S::const_iterator>
(S::iterator, S::iterator,
S::const_iterator, S::const_iterator, forward_iterator_tag);
+#endif
+#ifdef REPIIPP
template
S&
S::_M_replace<C*>
(S::iterator, S::iterator, C*, C*, forward_iterator_tag);
+#endif
+#ifdef REPIIPP2
template
S&
S::_M_replace<const C*>
(S::iterator, S::iterator, const C*, const C*, forward_iterator_tag);
+#endif
+
+#ifdef COPY
+ template
+ S::size_type S::copy(C*, S::size_type, S::size_type) const;
+#endif
+#ifdef CONII
template
C*
S::_S_construct<S::iterator>
(S::iterator, S::iterator, const allocator<C>&);
+#endif
+#ifdef CONIIF
template
C*
S::_S_construct<S::iterator>
(S::iterator, S::iterator, const allocator<C>&, forward_iterator_tag);
+#endif
+#ifdef CONPPF
template
C*
S::_S_construct<C*>
(C*, C*, const allocator<C>&, forward_iterator_tag);
+#endif
+#ifdef CONPPF2
template
C*
S::_S_construct<const C*>
(const C*, const C*, const allocator<C>&, forward_iterator_tag);
+#endif
+#ifdef FIND
// These members are explicitly specialized, and can only be in one
// translation unit or else we get multiple copies. . .
#if _GLIBCPP_INSTANTIATING_CHAR
@@ -174,76 +314,77 @@
_Char_traits_match<wchar_t, traits_type>(__c));
}
#endif
-#endif // MAIN
+#endif
-#ifdef ADDSS
-template S operator+(const S&, const S&);
+#ifdef FINDC
+ template
+ S::size_type S::find(C, S::size_type) const;
#endif
-#ifdef ADDPS
-template S operator+(const C*, const S&);
-#endif
-#ifdef ADDCS
-template S operator+(C, const S&);
-#endif
-#ifdef ADDSP
-template S operator+(const S&, const C*);
-#endif
-#ifdef ADDSC
-template S operator+(const S&, C);
-#endif
-#ifdef EQSS
-template bool operator==(const S&, const S&);
-#endif
-#ifdef EQPS
-template bool operator==(const C*, const S&);
-#endif
-#ifdef EQSP
-template bool operator==(const S&, const C*);
-#endif
-#ifdef NESS
-template bool operator!=(const S&, const S&);
-#endif
-#ifdef NEPS
-template bool operator!=(const C*, const S&);
-#endif
-#ifdef NESP
-template bool operator!=(const S&, const C*);
+
+#ifdef RFIND
+ template
+ S::size_type S::rfind(C const*, S::size_type, S::size_type) const;
#endif
-#ifdef LTSS
-template bool operator<(const S&, const S&);
+
+#ifdef RFINDC
+ template
+ S::size_type S::rfind(C, S::size_type) const;
#endif
-#ifdef LTPS
-template bool operator<(const C*, const S&);
+
+#ifdef FFO
+ template
+ S::size_type S::find_first_of(C const*, S::size_type, S::size_type) const;
#endif
-#ifdef LTSP
-template bool operator<(const S&, const C*);
+
+#ifdef FLO
+ template
+ S::size_type S::find_last_of(C const*, S::size_type, S::size_type) const;
#endif
-#ifdef GTSS
-template bool operator>(const S&, const S&);
+
+#ifdef FFNO
+ template
+ S::size_type S::find_first_not_of(
+ C const*, S::size_type, S::size_type) const;
#endif
-#ifdef GTPS
-template bool operator>(const C*, const S&);
+
+#ifdef FLNO
+ template
+ S::size_type S::find_last_not_of(
+ C const*, S::size_type, S::size_type) const;
#endif
-#ifdef GTSP
-template bool operator>(const S&, const C*);
+
+#ifdef FLNOC
+ template
+ S::size_type S::find_last_not_of(C, S::size_type) const;
#endif
-#ifdef LESS
-template bool operator<=(const S&, const S&);
+
+#ifdef COMPARE
+ template
+ int S::compare(S::size_type, S::size_type, S const&) const;
#endif
-#ifdef LEPS
-template bool operator<=(const C*, const S&);
+
+#ifdef COMPARE2
+ template
+ int S::compare(
+ S::size_type, S::size_type, S const&, S::size_type, S::size_type) const;
#endif
-#ifdef LESP
-template bool operator<=(const S&, const C*);
+
+#ifdef COMPAREP
+ template
+ int S::compare(C const*) const;
#endif
-#ifdef GESS
-template bool operator>=(const S&, const S&);
+
+#ifdef COMPAREP2
+ template
+ int S::compare(
+ S::size_type, S::size_type, C const*, S::size_type) const;
#endif
-#ifdef GEPS
-template bool operator>=(const C*, const S&);
+
+#ifdef ADDPS
+template S operator+(const C*, const S&);
#endif
-#ifdef GESP
-template bool operator>=(const S&, const C*);
+#ifdef ADDCS
+template S operator+(C, const S&);
#endif
#ifdef EXTRACT
template basic_istream<C>& operator>>(basic_istream<C>&, S&);
@@ -260,18 +401,3 @@
#endif
} // std
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-