#: :CompileDB.txt
# Compiler information listings for Thinking in
# C++ 2nd Edition By Bruce Eckel. See copyright
# notice in Copyright.txt.
# This is used by ExtractCode.cpp to generate the
# makefiles for the book, including the command-
# line flags for each vendor's compiler and
# linker. Following that are the code listings
# from the book that will not compile for each
# compiler. The listings are, to the best of my
# knowledge, correct Standard C++ (According to
# the Final Draft International Standard). Please
# note that the tests were performed with the
# most recent compiler that I had at the time,
# and may have changed since this file was
# created.
# After ExtractCode.cpp creates the makefiles
# for each chapter subdirectory, you can say
# "make egcs", for example, and all the programs
# that will successfully compile with egcs will
# be built.
#################################################
# Compiling all files, for a (theoretical) fully-
# conformant compiler. This assumes a typical
# compiler under dos:
{ all }
# Object file name extension in parentheses:
(obj)
# Executable file extension in square brackets:
[exe]
# The leading '&' is for special directives. The
# dos directive means to replace '/'
# with '\' in all directory paths:
&dos
# The following lines will be inserted directly
# into the makefile (sans the leading '@' sign)
# If your environment variables are set to
# establish these you won't need to use arguments
# on the make command line to set them:
# CPP: the name of your C++ compiler
# CPPFLAGS: Compilation flags for your compiler
# OFLAG: flag to give the final executable name
#@CPP = yourcompiler
#@CPPFLAGS =
#@OFLAG = -e
@.SUFFIXES : .obj .cpp .c
@.cpp.obj :
@ $(CPP) $(CPPFLAGS) -c $<
@.c.obj :
@ $(CPP) $(CPPFLAGS) -c $<
# Assumes all files will compile
# See later for an example of Unix configuration
#################################################
# Borland C++ Builder 4 –- With Upgrade!!!
# Target name used in makefile:
{ Borland }
# Object file name extension in parentheses:
(obj)
# Executable file extension in square brackets:
[exe]
# The leading '&' is for special directives. The
# dos directive means to replace '/'
# with '\' in all directory paths:
&dos
# Inserted directly into the makefile (without
# the leading '@' sign):
@# Note: this requires the upgrade from
@# www.Borland.com for successful compilation!
@CPP = Bcc32
@CPPFLAGS = -w-inl -w-csu -wnak
@OFLAG = -e
@.SUFFIXES : .obj .cpp .c
@.cpp.obj :
@ $(CPP) $(CPPFLAGS) -c $<
@.c.obj :
@ $(CPP) $(CPPFLAGS) -c $<
# Doesn’t support static const
# array initialization:
C10:StaticArray.cpp
# Problem with string constructors at run-time:
C17:ICompare.cpp
# Template bug:
C19:ArraySize.cpp
# Not sure:
C20:AssocInserter.cpp
# Bitset is Broken in this compiler’s library:
C20:BitSet.cpp
# Standard Library problem:
C21:SearchReplace.cpp
# Function-level try blocks not implemented:
C23:FunctionTryBlock.cpp
# Uses the SGI STL extensions, so it actually
# isn't supposed to compile with this
# compiler:
C20:MapVsHashMap.cpp
C21:MemFun4.cpp
C21:Compose2.cpp
#################################################
# Visual C++ 6.0 –- With Service Pack 3!!!
# Target name used in makefile:
{ Microsoft }
# Object file name extension in parentheses:
(obj)
# Executable file extension in square brackets:
[exe]
# The leading '&' is for special directives. The
# dos directive means to replace '/'
# with '\' in all directory paths:
&dos
# Inserted directly into the makefile (without
# the leading '@' sign):
@# Note: this requires the service Pack 3 from
@# www.Microsoft.com for successful compilation!
@CPP = cl
@CPPFLAGS = -GX -GR
@OFLAG = -o
@.SUFFIXES : .obj .cpp .c
@.cpp.obj :
@ $(CPP) $(CPPFLAGS) -c $<
@.c.obj :
@ $(CPP) $(CPPFLAGS) -c $<
C02:Incident.cpp
# It can’t even handle multiple "for(int i =...:"
# statements in the same scope (a really old
# language feature!):
C02:Intvector.cpp
C03:Assert.cpp
C07:MemTest.cpp
C09:Cpptime.cpp
C12:Comma.cpp
C13:GlobalNew.cpp
# Common problem with namespaces and C libraries:
C17:ICompare.cpp
C18:FileClassTest.cpp
C18:Datagen.cpp
C18:Datascan.cpp
# Can’t do template type induction properly:
C19:ArraySize.cpp
# Doesn’t know about template-templates:
C19:TemplateTemplate.cpp
C19:applyGromit2.cpp
# Can’t do template specializations:
C19:Sorted.cpp
# Can’t do explicit template instantiation:
C19:ExplicitInstantiation.cpp
# Missing part of iostreams:
C20:StreamIt.cpp
# Problem with STL:
C20:BasicSequenceOperations.cpp
C20:VectorCoreDump.cpp
C20:DequeConversion.cpp
C20:Stack2.cpp
# Problem with static class initializer:
C20:BankTeller.cpp
# Missing STL functionality:
C20:VectorOfBool.cpp
# STL problem:
C20:AssocInserter.cpp
# Various problems:
C20:WildLifeMonitor.cpp
C20:MultiSet1.cpp
C20:Thesaurus.cpp
# These use the SGI STL extensions, so they
# actually aren't supposed to compile
# with this compiler:
C20:MapVsHashMap.cpp
C21:Compose2.cpp
# Namespace problem again, and other issues:
C21:FunctionObjects.cpp
C21:Binder1.cpp
C21:Binder3.cpp
C21:Binder4.cpp
C21:RandGenTest.cpp
C21:MemFun1.cpp
C21:MemFun2.cpp
C21:FindBlanks.cpp
C21:MemFun3.cpp
C21:MemFun4.cpp
C21:FillGenerateTest.cpp
C21:Counting.cpp
C21:Manipulations.cpp
C21:SearchReplace.cpp
C21:Comparison.cpp
C21:Removing.cpp
C21:SortTest.cpp
C21:SortedSearchTest.cpp
C21:MergeTest.cpp
C21:SetOperations.cpp
C21:ForEach.cpp
C21:Transform.cpp
C21:CalcInventory.cpp
C21:TransformNames.cpp
C21:SpecialList.cpp
C21:NumericTest.cpp
# Most compilers don’t support this yet:
C23:FunctionTryBlock.cpp
# Lack of support for 'static const' again:
C25:Recycle2.cpp
C26:ExtractCode.cpp
C26:MemTest.cpp
# All these do not compile only becase of the
# lack of support for 'static const'. To make
# them compile, you must substitute the
# 'enum hack' shown in chapter 8:"CompileDB">
C08:StringStack.cpp
C08:Quoter.cpp
C08:Volatile.cpp
C10:StaticArray.cpp
C11:HowMany2.cpp
C11:Autocc.cpp
C11:Pmem2.cpp
C12:Smartp.cpp
C12:Iosop.cpp
C12:Copymem.cpp
C12:Refcount.cpp
C12:RefcountTrace.cpp
C13:MallocClass.cpp
C13:Framis.cpp
C13:ArrayNew.cpp
C14:FName1.cpp
C14:FName2.cpp
C16:IStack.cpp
C16:Stemp.cpp
C16:Stemp2.cpp
C16:Stackt.cpp
C23:Cleanup.cpp
C24:Selfrtti.cpp
C24:Reinterp.cpp
#################################################
# The egcs (Experimental g++ compiler) snapshot
# under Linux, dated July 18, 1998
{ egcs }
(o)
[]
# The unix directive controls the way some of the
# makefile lines are generated:
&unix
@CPP = g++
@OFLAG = -o
@.SUFFIXES : .o .cpp .c
@.cpp.o :
@ $(CPP) $(CPPFLAGS) -c $<
@.c.o :
@ $(CPP) $(CPPFLAGS) -c $<
# Files that won't compile
# Error in streambuf.h:
C18:Cppcheck.cpp
# Not sure:
C19:applyGromit2.cpp
# Missing the standard library 'at()':
C19:Sorted.cpp
C19:ExplicitInstantiation.cpp
# Problem with the egcs iterator header
C20:StreambufIterator.cpp
C20:RawStorageIterator.cpp
# egcs is missing istreambuf_iterator
C20:WordList2.cpp
C20:TokenizeTest.cpp
C20:TokenIteratorTest.cpp
C20:WordCount.cpp
C20:MultiSetWordCount.cpp
# egcs is missing std::iterator:
C20:Ring.cpp
# egcs is missing char_traits
C17:ICompare.cpp
# egcs vector and deque (at least) are missing
# the