From -5915465583289458905
X-Google-Language: ENGLISH,ASCII-7-bit
X-Google-Thread: f78e5,307cbe6f0ea2ccd3,start
X-Google-Attributes: gidf78e5,public
X-Google-ArrivalTime: 2003-06-08 11:05:15 PST
Path: archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!kibo.news.demon.net!mutlu.news.demon.net!demon!mail2news.demon.co.uk!devnull
From: bplummer@nyc.rr.com ("Brian Plummer")
Newsgroups: comp.std.c++
Subject: Recommendation to the Standards Committee
Date: Sun, 8 Jun 2003 18:05:15 +0000 (UTC)
Organization: Road Runner - NYC
Lines: 56
Approved: fjh@cs.mu.oz.au (Fergus Henderson , moderator of comp.std.c++)
Message-ID: <ohQDa.44053$4_1.12732776@twister.nyc.rr.com>
X-Trace: mail2news.demon.co.uk 1055095515 12000 10.0.0.1 (8 Jun 2003 18:05:15 GMT)
X-Complaints-To: abuse@demon.net
NNTP-Posting-Date: Sun, 8 Jun 2003 18:05:15 +0000 (UTC)
X-Received: from mulga.cs.mu.oz.au ([128.250.1.22])
	by news.demon.co.uk with esmtp (Exim 4.12)
	id 19P4XZ-00037P-00
	for mail2news@news.news.demon.net; Sun, 08 Jun 2003 18:05:14 +0000
X-Received: by mulga.cs.mu.OZ.AU
	id EAA07000; Mon, 9 Jun 2003 04:05:10 +1000 (EST)
X-Authentication-Warning: mulga.cs.mu.OZ.AU: fjh set sender to devnull@stump.algebra.com using -f
X-Path: comp-std-cpp-robomod!not-for-mail
X-Robomod: STUMP, ichudov@algebra.com (Igor Chudov)
X-Delivered-To: std-c++@ucar.edu
X-Newsgroups: comp.std.c++
X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
X-NNTP-Posting-Date: Thu, 05 Jun 2003 19:23:00 EDT
X-Spam-Status: No, hits=-2.3 required=5.0
	tests=INVALID_MSGID,NOSPAM_INC,SPAM_PHRASE_02_03
	version=2.41
Xref: archiver1.google.com comp.std.c++:19657

I have the following recommendation for an addition to the C++ standard:

I'd like to see the text used for the header guards in the standard library
header files, well, standardized.

Why? You ask...

Well, almost all of the code I write is portable to a large number of
Hardware/OS/Compiler combinations and I (try to) employ a technique to
reduce compile times discussed by Lakos on pages 82-88 of "Large Scale C++
Software Design" which advocates protecting every #include file directive
with a redundant check for previous inclusion of said header in the
translation unit.  An example could be:

#ifndef __IOSTREAM__
#include <iostream>
#endif

This is what I would use if I was using the cygwin hosted gcc 3.1 that is
installed on my Windows machine.  If I want to accomplish this same thing
with MSVC (Microsoft Visual Studio .NET 2003) I would have to use the
following:

#ifndef _IOSTREAM_
#include <iostream>
#endif

The problem here is that the MSVC header guard for iostream only uses one
(1) underscore instead of 2 as in the gcc header guard for iostream.  So, if
I compile my code using the gcc header guard check as displayed in the first
example with MSVC, my attempt at eliminating redundant inclusion fails,
silently, because the header guards are different.

I'm assuming that you are familiar with this technique.  If not, you should
take a quick look at the pages I site from Lakos.  Its a very
straight-forward technique and when carefully employed it can dramatically
reduce compile times on large projects, especially if the standard library
headers are widely referred to in the project's header files which is
becoming ever more prevalent with the exploding use of template classes and
functions.

If the header guard text was standardized then I can employ this technique
without having to worry about how Library Vendor X has assembled the header
guard text.

Thats all there is to it.

Thanks,
Brian Plummer

---
[ comp.std.c++ is moderated.  To submit articles, try just posting with ]
[ your news-reader.  If that fails, use mailto:std-c++@ncar.ucar.edu    ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://www.jamesd.demon.co.uk/csc/faq.html                       ]



