ISO/ IEC JTC1/SC22/WG14 N872

WG14/N872 J11/99-007

Approved minutes of Co-located ISO/JTC1/SC22/WG14 and
NCITS/J11 meetings held October 5-9, 1998, in Santa Cruz,
California 95060 USA. 


Monday October 5th

1. Opening activities
1.1  Opening Comments
1.2  Introduction of Participants
Benito, John         Perennial           WG14, Convener
Charney, Reginald B. Charney & Day       Observer
Farance, Frank       Farance, Inc.       J11
Fitzpatrick, Liam    UK                  WG14, UK
Fukutoui, Hiroshi    ADaC                WG14, Japan
Glassborow, Francis  UK                  WG14, UK
Gwyn, Douglas        US Army             J11
Hoerth, Mark         Hewlett-Packard     J11
Jaeschke, Rex        Self                J11, Chair
Jones, Derek         BSI                 WG14, UK HOD
Jones, Larry         SDRC                J11, Project Editor
Keaton, David        Self                J11
Keishiro, Tanaka     Fujitsu             WG14, Japan HOD
Kristoffersen, Jan   Ramtex              WG14, Denmark
Kwan, John           HP                  Observer
MacDonald, Tom       SGI                 J11
McKale, Alex         HP                  Observer
Meyers, Randy        Silverhills Systems J11
Nelson, Clark        Intel               J11
O'Riordan, Martin J. NSAI                WG14, Ireland HOD
Peterson, Rich       Compaq/Digital      J11
Plum, Tom            Plum Hall           J11
Robinson, Tom        Perennial           J11, alternate
Seebach, Peter       Self                J11
Seymour, Bill        Self                J11, Rationale Editor
Simonsen, Keld       Danish Standards    WG14, Denmark HOD
Smigiel, Trevor      HP                  Observer
Thomas, Jim          HP                  J11, alternate
Tydeman, Fred        Tydeman Consulting  J11, Meeting secretary
Walls, Douglas       Sun                 J11, USA HOD

1.3  Selection of Meeting Chair
Rex Jaeschke was unanimously selected as chair.

1.4  Host Facilities/local information
1.5  Procedures for this Meeting

1.6  Approval of Previous Minutes [N840]
  1.2 List of participants: Change company of A. Leca to
  Work: n822 -> n829 DR 63
  j11 tag: Benito did vote -> yes 11

*AI: Rex Jaeschke: procedures for update of minutes (final
minutes) to be made official.

*AI: Randy Meyers: will update previous minutes for those
that he took.

1.7 Review of Action Items and Resolutions
OPEN: Gwyn/Benito: To notify WG15 about changes to assert.
Dropped: Gwyn/Seebach: printf/scanf do right thing.
Done: Benito: Investigate availability of standards in
electronic form.
Done: Jaeschke: Respond to Tribble.
OPEN: Harris: __func rationale from Mooney.
Done: Feather: Provide struct hack rationale.
Done: Feather: Provide rationale for mixed declarations
and code.
OPEN: Meyers: Produce rationale for macro replacement
and pragmas.
Done: Thomas: Rationale for tgmath.
Done: Feather: Provide rationale for vacopy.
Done: Gwyn: Rationale to discuss horrible random number
Done: Seymour: Update Rationale.
Done: Walls: Draft _exit rationale.
OPEN: Seebach: Provide strsep() rationale.
OPEN: Feather - Rationale for struct tmx. [No longer needed].
OPEN: Jones - Provide strftime() rationale.
OPEN: Meyers - %m rationale.
Dropped: 2.0: Jaeschke: Coordinate a review process for the
Done: 5.0: Simonsen: Draft response to US comment 5.
Done: DR63: Benito: Update DR log.
Dropped: 21.4: Kristoffersen will collect industry input
regarding struct tmx.
Done:  21.4: Leca will discuss the struct tmx issue with

No resolutions from previous meeting.

1.8  Approval of Agenda [N845]

1.9  Distribution of New Documents

N836 - Peterson - No Extended Characters in External
N840 - Keaton - Draft minutes of Copenhagen meeting.
N850 - Seymour - Rationale Editor's report.
N851 - Feather - Changes to inttypes.h + stdint.h
N852 - Jones - Project Editor's report.
N853 - Feather - Conformance issues.
N854 - ACE - Digital Signal Processing (DSP) C.
N855 - Walls - February 1999 meeting information.
N856 - Simonsen - Liaison report on WG15 (POSIX) activities.
N857 - Simonsen - Liaison statement from WG14 to WG20.
N858 - Walls - Status of approved proposals for C9X, CD1
(Post-Santa Cruz).
N859 - Tydeman - Preliminary Minutes for October 1998, Santa
N860 - Simonsen - Liaison statement to WG15 (POSIX) from
WG20/N536 - Internationalization APIs.

1.10 Information on Next Meeting

Beaverton (Portland area), Oregon, USA - Intel hosting.
Hotel in walking distance about $65. February 1-5, 1999.

1.11 Identification of National Bodies/J11 voting members
j11 - 12 voting members; Intel cannot vote this meeting.
Should get 3 more during week.  May lose Unisys as voting on
3rd day.  Have 17 voting on Monday. Had 17 at end of

International: USA, UK, Denmark, Japan, Ireland

2. Project Editor's Report [N852] (Jones)
FCD - PDF and text versions - SC22 N2794 (but no PostScript)
N843 - FCD w/ change bars - CD2
Committee draft August 3

3. Rationale Editor's Report [N850] (Seymour)
*AI: Benito: Send Rationale to Keld for ftp site
*AI: Jan Kristoffersen+Randy Meyers words why no I/O
hardware in C9X (pro and con sides).  Post to reflector
before include into rationale.
*AI: Clive Feather - rationale for sequence points. [No
longer needed].

4. CD1/FCD Status/Plenary Report (Benito)
January 8, 1999, SC22 ballot closes.  February meeting will
be like Copenhagen meeting to review all comments.  j11
comments will be voted on and forwarded to SC22 better this

5. CD1/FCD Status in the U.S. [N849] (Jaeschke)
CD1 is closed - no formal objections from those who
submitted comments.  September 11 - November 10 = j11 public
comment period.  December 23 is deadline for j11 submission
to SC22 by IR.  j11 will respond to comments at February
meeting.  US vote can be (if concerns): no (until
addressed), yes (assuming convener will address).

N848 - issues from j11 members on CD1 resolutions.

6. Liaison Activities
6.1 J11 + ANSI (C)
New members can vote after first meeting (was at start of
2nd meeting).  Matters for email votes.

6.2 WG14 + ISO/SC22 (C)
C++ need not take on C9X issues.  C can evolve on its own.
BUT, they should be aware of each other's work.  WG21 will
now look into Hardware I/O.

6.3 J16/WG21 (C++)
No C++ meeting since last C meeting.  Is now official
standard.  Can buy from ANSI for $18 for electronic or $175
for paper copy.
*AI: Keld - look into putting C++ on C private ftp site for
members use.  Still maintain email cross posting between C
and C++.

6.4 WG15 (POSIX)
N856 - Liaison report on WG15 POSIX from Keld.  They want to
include C90 verbatium (not by reference).  Note: C++ refers
to C90 library.
*AI: We need to draft letter to request POSIX NOT include
it.  Done: Is part of WG14 N860.

6.5 WG20 (I18N)
Registry of locales.  The "C" locale is NOT registered.
They are working on API (based greatly upon C's work).
Sorting standard being worked on.  Extended identifiers
being worked on based upon C and C++.  Concerns from unicode
people.  C++ has frozen list, C has opened ended list; SC22
meeting agreed that C meets the needs.

6.6 Other Liaison Activities
*AI: Tydeman - post where to get LIA-2.

7. Identify work items for this meeting (Jaeschke/Benito)

8a. long long
e.g. 64-bit support.  Should it be optional for
freestanding?  Japan wants optional.  UK was against, now
viewpoint is accept long long and how help with migration.
Vendors can have many different printfs that support, or
not, if floating-point and/or long long to get small or
large code size.  Japan will withdraw NO vote if rationale
contains words on how to reduce code size.
*AI: Meyers: Write rationale on 64-bit with ideas on how to
reduce code size if not used.

[The discussions on paper N852 took place over several
sessions and days. They are all gathered here in the order
they are in N852.]

8b. Translation limits [N852]
Two logical scopes for FOR: variables in () and in statement
{}.  Even if choose wrong now, we might change in the future
if someone's ox is gored.  FOR counts as one.

8c. Scope of identifiers [N852]
Should duplicate labels be a constraint?  Agree to make it a

8d. Real floating types [N852]
cast of floats to same type.  Footnote 43 appears to cover
it: it must be done.  But, we are missing how convert from
type A to type A.  Jones will add words to conversions.

8e. Simple assignment [N852]
People use pointers in Boolean context.  Make them
assignment compatible (much like C++).

8f. Function declarators (including prototypes) [N852]
Lookahead in parameter lists when prototypes used and
parameter name is same as typedef name.  May need lots of
lookahead.  Suggest: drop back to C90 words and leave
undefined.  Revert back to C90 words on typedef names are
parameter names.

[8i.] Use of library functions [N852]
Current putc() is bad in most implementations in that either
void * fails or int is allowed.  Math generic macros take
any of several floating-point types.  Page 154: remove _Bool
from parameter list in synopsis is one possible solution.
Need group to look at problem.  [Also 18c.]  Assign (=),
cast, and floating-point classification macros are only
times narrowing must happen.  Library macros - type checking
and/or promotions.  Most believe that functions masked by
macros must still act like a function w.r.t. type checking
and/or promotions.  Editor will make public comment.

[8j.] ispunct macro [N852]
Categories are vague.  Suggest revert back to C90.

[8k.] localeconv [N852]
POSIX has it wrong (table and words do not match).  Keld has
convinced Larry that new int_* members are needed.
*AI: Keld Simonsen will coordinate with POSIX, WG20, Single
Unix on localeconv.

[8l.] General utilities [N852]
EXIT_FAILURE, EXIT_SUCCESS: make constant.  OK to change
MB_CUR_MAX to size_t.

[8m.] strtod, strtof, strtold [N852]
Hex float constants to strtod.  No one remembers why need
'.' or binary-exponent-part must appear.
[Also 18f.]  Currently, 0x12 is an invalid hex
floating-point string to strtod.  No objections to allowing
this as valid.

[8n.] Searching and sorting [N852]
Can qsort be passed zero members to sort?  Group agrees to
allow zero.  Say nothing about NULL pointer.  This is same
as mem* functions.

8g. restrict (Derek Jones)
UK wants to distinguish R/O from R/W accesses; so can allow
two R/O pointers to point to same thing.  Shows up on
LINPACK.  Tom MacDonald: technical problem: pointer to
pointer.  Might work with restricted pointers to const data.
*AI: UK (Jones) will work on getting words along with SGI

8h. struct tmx
[This item was discussed several times over several days.
They are all gathered here.]
Copenhagen meeting: almost ready to rip out back to C90.
France voted NO on issue with current C9X.  Jones to lead
group on how to back out.  May want to keep normalization on
broken down times.  France and US do not want current C9X.

struct tmx: When remove, what should be done about
normalization of broken down time?  There are bugs in the
code that has been proposed.  So propose backing out both
struct tmx and normalization.

8i. More on N852: Use of library functions

8j. More on N852: ispunct macro

8k. More on N852: localeconv

8l. More on N852: General utilities

8m. More on N852: strtod, strtof, strtold

8n. More on N852: Searching and sorting

8o. Forward pointer in standard to Rationale.  Web addresses
change.  Add to forward in C9X.  Agree to do.

8p. N848: Three issues with responses.  No way to change
responses after USA accepted them.

Tuesday October 6th

Review group for Annex D Sequence points: Thomas, Tydeman,
Seymour, and Plum will meet Thursday evening.

9a. enum declarations in FOR (D.Jones)
[This topic was discussed several times over several days.
All those gathered here.]
WHILE is not really equivalent to FOR.
enum {a,b};
for(;;i+=sizeof(enum{b,a})) j+=b;
  not equal to
while(){j+=b; i+=sizeof(enum{b,a});}
Which b is added to j?
Need new words in place of equivalence.

Scope of local compound literal matters in WHILE.  If add
"extra" braces in WHILE, then compound literal will change
from function scope to local block scope.  One solution is
to add "extra" braces around loop structures to match C++.

C++ has cases where local declarations in IF cannot be same
id: if( int i = f() ) int i = g(); General case for both
languages is {if(){...}else{...}}  Choices: Move FOR rewrite
to example + prose; Redo rewrite using IF and GOTO;
*SV: IF-GOTO = 2; Execution = 0;  words = 13.

Proposal: (page 17) Translation limits: 127 nesting levels of
6.2.1 (page 25) scopes of identifiers: ... the identifier
has "block scope," which terminates at the end of the
associated block.
6.8 (page 119) statements: A "block" allows a set ...  (move
6.8.2 semantics here)
6.8.2 Compound statement: Semantics: Move current to 6.8 and
replace it with: A "compound statement" is a block.
6.8.4 Selection statements: (add to semantics) A selection
statement and all associated substatements are blocks.
6.8.5 iteration statement: An iteration statement is a block
and its loop body is a block.  Redo example on page 68.
Check Forward references. The FOR statement
The following statement
  FOR ( c1; e2; e3 ) statement
behaves as follows: The expression e2 is the controlling
expression.  If c1 is an expression it is evaluated as a
void expression before the first evaluation of e2
controlling expression.  The evaluation of the controlling
expression takes place before each execution of the loop
body.  The evaluation of e3 takes place after each execution
of the loop body as a void expression.  Both c1 and e3 can
be omitted.  An omitted e2 is replaced by a nonzero
constant.  Also, strike the current text rewrite of FOR into

Has very quiet change involving structs defined with members
in different order at outer and inner scopes.  Words will be
added to rationale.  Current C9X words say scope ends at
same "point".

For two identifiers with block scope, they have the same
scope if and only if they are associated with the same
block.  For two identifiers that do not have block scope
they have the same scope if and only if their scopes
terminate at the same point.  Note: these words were
rejected because they do not clearly state for all cases
when a block is nested inside another block. 

6.8.4 selection statement: A selection statement is a block
whose scope is a strict subset of its enclosing block.  All
associated substatements are block whose scopes are strict
subsets of the associated selection statement block.  Note:
These words *do* state when a block is nested inside another

Change meaning of block nesting to:

6.8.4 Select statement
A selection statement is a block whose scope is a strict
subset of its enclosing block.  All associated substatements
are blocks whose scopes are strict subsets of the associated
selection statement block.

6.8.5 Iteration statements
An iteration statement is a block whose scope is a strict
subset of its enclosing block.  The associated loop body is
a block whose scope is a strict subset of the associated
iteration statement block.
*AI: Tom MacDonald: Rationale for this change to FOR (and

9b. scoping issues in FOR (MacDonald)

9c. inttypes.h/stdint.h [N851] (Feather)
Clive provided words to generalize to non-powers-of-two
ints.  OK for header to include other header.  No objection.
Adopted with minor editor changes.

9d. conformance discussion [N853]
Have not accepted new items for some time.  This is not an
issue raised at ballot.  Really applies to all languages, so
should take place at SC22.  Current conformance is OK for
implementors, but not for users (strict is too tight, and
conforming is too loose).
*AI: Seebach craft words for rationale why we did not adopt.
*AI: Keld will host email-list about conformance to start with
C, C++, Java.

10. [N847] (Feather) subgroup deliberations
Break into groups to discuss N847 (Feather 43 issues with

11. [N847] (Feather) subgroup presentations
[These were presented out of order over several days.  They
have been gathered here in order.]

#1 Conformance - pragmas will become implementation defined.

#2 No change: footnote was left out on purpose.

#3 \s character: withdrawn by Clive - no such single

#4 Basic versus extended char sets.  Have "basic" mean 96
required chars.  (appears to align with C++).  Final words
still in progress.

#5 UCHAR_MAX <= INT_MAX: Has been like this for at least 10
years, no need to change.  Already known problem with too
much existing practice.

#6 #else binding: Clive's change would require
#extended-directive to be flagged (even if #if'ed out).
Grammar is already ambiguous (pp tokens versus directives).
Felt no need to fix this.

#7 UCNs in #if: More than just phase 5 (for example, turn
pp-numbers into numbers) Do not add phase 5.  Strike: Phase
5 of translation: "and universal character name" since it is
formally an escape sequence.

#8 #include: Need new words.

#9 VA_COUNT: No new features.

#10: __cplusplus: Agree - shall not be defined.  So tell C
from C++.

#11: STDC_HOSTED: Good idea, but compiler cannot always tell
if hosted or not.  Better for command line.

#12: Footnotes 25/29: Disagree: Footnotes 25 and 29 are
similar but not interchangeable.  Different contexts.

#13 union members: Need paragraph that Clive wants to drop
to cover:
  union {
    short s;
    int i;
    double d;
  } x;
  x.i = 1;
  x.s => ????
This would become valid if drop paragraph.  Implementations
need to document undefined behavior with respect to unions.
or perhaps indeterminate.  .... still open ....

#14: object lifetime: realloc returning "same" object makes
lifetime hard to define (is not the same object).  Nothing
broken.  Many people are against this fundamental definition
this late.  So, no change.

#15: Forbidden UCNs: Current wording is OK.  No need to

#16: char string literals: Already clear elsewhere.

#17: multiple assignment: Committee intent: Only need to
worry between sequence points.  Do NOT read after write in
serial_port = 66; On the other hand, x = timer = 42; -- does
not matter which way implementations make this work because
the user can force either behavior by writing the code
differently.  volatile has so many things that are so system
dependent that the committee made it implementation defined. 
x; does not require access (read) of x.  x = x; does require
access (read).  C90 intent was never read after write.  Two
viewpoints: Special case assignment expression-statement
(serial_port = 66;) and leave other case as currently
specified (write, then read) or never read-back.  After
debate, decided to add these words to rationale: The
committee intends that the value of an assignment expression
be available without necessarily reading it back out of the
left operand.  Such an extra read could cause problems for
volatile objects (e.g.  device registers).  The reason for
saying that "an assignment expression has the value of the
left operand after the assignment" is to make it clear that
the value is determined after any changes, such as bit-field
narrowing or floating-point conversions, and not to indicate
that the left operand must be read after the assignment. 

#18: Number of arguments: No change needed.
*AI: Keaton+Larry to come up with words for why.

#19: adjustments to argument types: May need words to allow
more qualifiers (but not take away qualifiers).  This
applies to both no prototypes and varargs.  Add these words:
Each of the types is either a pointer to void or to a
pointer to character type, and the type pointed to by the
parameter has all the qualifiers of the type pointed to by
the /type/.

#20: sizeof bit-fields: Adapted his intent.  Change words to
... or to an expression that designates a bit-field member.

#21: Pointer compares: Pick up normative text.  Strike
change to footnote.

#22: Bit-fields of unsupported types: No support to do this

#23: Restrict and string literals ... still open ...

#24: inline: Footnote could be misleading, so do not add.

#25: inline: Current words are clear enough.

#26: VLA side effects: Side effects in VLA are not liked
(bad idea), but they are not outlawed; hence is unspecified
was the compromise to reach consensus.  Difficult to
implement in some cases.  Not needed in other cases: pointer
to VLA[side effects].  sizeof(vla[n++]) is not well liked. 
*AI: Tom MacDonald: add this to rationale. 

#27: Ranges of Bit-fields: That is the range that a portable
program can depend upon.  So, no change.

#28 Initialize unsigned char arrays: insufficient utility.
Until translation phase 7, string literals have no type
(maybe).  Want same behavior at runtime during assignment as
during compile time initialization.  No support for a

#29: _exit: Most vendors feel that POSIX does not want C to
define _exit.  Objection is name.
*SV: Who wants this with new name: 6; Against: 6
Committee split on adding under any name.  Hence, not adopt.

#30: maximum malloc alignment: Two choices: numeric constant
that is maximum of alignment of all types, e.g. 8, OR a
typedef of the most strict alignment type (could be a
*SV: Who wants work done: 0; Too late: many.  Good idea, but
no new features. 

#31: offsetof macro: a: For unions: No.  New feature
request, limited utility.  b: member-designator: clear
enough.  footnote suggestion unclear.

#32: mbstate_t with stream: Intent is correctly expressed in
the draft.  New functionality, implementation issues, change
current behavior (substantive change) => no.

#33: tmpfile(): Accept in principle. Strike: ", including
any opened by a previous successful call ..."

#34: fread/fwrite: Clear enough as specified.

#35: compare fpos_t: No new features.  No large need for it.

#36: assert macro: setjmp and assert have different
requirements on arguments, so appears there is no global
fix.  Replace _Bool with scalar (similar to isnan()).  Adopt
Clive's words.

#37: stdlib.h macros: EXIT_SUCCESS to constant.  Already
done via editor's report.  MB_CUR_MAX type changed to
size_t.  Already done via editor's report.  Most likely use
in expression as argument to malloc, so size_t is best type.

#38: type-generic macros.  Committee has discussed it in
past meetings and decided not to try to add it for C9X.

#39:  time.h
1. N/A - struct tmx gone.
2. Under consideration by editor.
3. Intent is for that code to go away.
4. N/A - parent text going away.
5. Intent was to be 2 digits, so year 567 would be 05.  Came
from POSIX, so we should not extend POSIX.  Our text is
taken from POSIX text, not inclined to change ours.  Take up
your issue with POSIX.
6. Other ways to do this (save/restore current locale), so
no need to make substantive change.  Also, this is not open
7. POSIX may have the original error (%Ou versus %OW) that
we copied.  Current spec is parallel to POSIX.  Making it
clearer changes semantics.  %OW is correct, %Ou is wrong
(after looking at POSIX).

#40: ispunct(): Add to C9X wording: "In the "C" locale, <<
words from C90 == the ispunct functions test for any
printing char that is neither space(' ') nor a character for
which isalnum is true >>"

#41, #42 subsumed by the removal of Annex D.

#43: Define "access".  Suggest move definition of "access"
from (the restrict section) to 3.x.  Change modify
to write.  Change fetch to read.  Access means either read
or write.

12a. [N847] (Feather) subgroup presentations

12b. scoping issues in FOR (MacDonald)

12b. Back to N847.

Evening meeting: Extended floating-point types.

Wednesday October 7th

13a. c[t]gamma name choice (Thomas)
ctgamma versus cgamma: want ctgamma for consistency as a
reserved name.

13b. [N847] (Feather) subgroup presentations

13c. strtod rounding issue (Thomas)
-0.1 is done as convert(0.1) then negate.  strtod matches
this.  But, this causes directed rounding to be wrong.
Round +/-infinity become round away from zero.  Best if
leave it implementation defined if rounding is done
before/after negation.

13d. [N847] (Feather) subgroup deliberations

14a. [N847] (Feather) subgroup deliberations

14b. [N847] (Feather) subgroup presentations

14c. WG15 (POSIX) Liaison [N856]
They are asking WG14 questions.  See paper.

Issue we have with them: Should they copy C Standard into
their standard or reference it?  We prefer that POSIX just

Working on locale description methodology.  Problem: Unicode
versus 646 char sets for description.  C cannot require that
wchar_t be 16-bits.

POSIX C locale registry: C committee should submit "C"
locale to registry (or perhaps jointly with POSIX for
"POSIX" locale).

14d. WG20 (I18N APIs)  [WG20/N536]
Trying to do bindings for C, C++, Ada, Cobol.  We believe
that it is OK for them to come up with binding to C.  May be
problems with reenterant (static buffers versus dynamic
strings), C's str* namespace, string versus wchar * and
*AI: Rex Jaeschke will work on issues raised by C committee
on I18N API. 

15a. What should C++ do with C defect reports they get?  For
now, informal ad hoc cooperation.  They plan on putting DRs
on a web site and C/C++ compatibility email list will be

15b. More on struct tmx.

15c.  [N847] (Feather) subgroup presentations

16a. Extended characters in extern names [N836] (Peterson)
Now footnote 50. Java may use "@" (at-sign) as a means to
escape to UCN.  Latin-1 meets most of Europe.  JIS meets
most of Japan.  UTF-8 may not be used for some time.  We as
programmers can live our native char set + @xxxx.  What we
will get is good enough.

16b. More FOR loop issues (MacDonald)

Evening: Addison-Wesley reception with C++ members

Thursday October 8th

17a. Floating-point future directions (MacDonald)
Bigger than long double?  There are two dimensions: Exponent
range and precision.  No one against the idea.

17b. strtod conversions (Thomas)
Remove sentence: "If the subject sequence begins with a
minus sign, ..."  At the beginning of [4] add "If the
subject sequence begins with a minus sign, the subsequent
sequence is interpreted as negated.  Footnote: 234".

Append to footnote 234: It is unspecified whether the
implementation converts a minus-signed sequence directly or
by negating the converted unsigned sequence (see F.5) The
two approaches may yield different results if rounding is
toward positive infinity or toward negative infinity.

Add to F.5: Append the paragraph: Functions such as strtod
that convert character sequences to floating types must
honor the rounding direction.  Hence if the rounding
direction might be upward or downward, the implementation
cannot convert a minus-signed sequence by negating the
converted unsigned sequence.

17c. atexit issue (MacDonald)
[This was discussed several times over several days.  They
are all gathered here.]
For both C++ and C:
 int fl(){}
 int f2(){ atexit(f1); }
 int main(){ atexit(f2); exit(0); }
Most believe that this is undefined behavior.
*AI: Everyone: See what your implementations do for this code.
Matters more to C++ (due to destructors and static data).

C told C++ committee: We believe it is undefined.  C++ will
let C answer it.

Revisit exit handlers: should we allow them to register new
handlers: No.

17d. [N847] (Feather) subgroup deliberations

17e. FOR loop issues (MacDonald)

18a. WG15 & WG20 Liaison statements (Simonsen)

18aa.  N857: Liaison statement from WG14 (C) to WG20
(Internationalization).  Words approved, will be in post
meeting mailing.  Add character attributes be locale
dependent.  For example a Greek letter (such as pi) might be
a letter in the Greek locale, but a special math character
in other locales. 

18ab.  N860: Liaison statement from WG14 (C) to WG15

18b. VLA/compound literals (MacDonald)
Currently allow VLA in compound literal.  Believe this was
not wanted.  Add "but not a VLA" to first constraint in Compound literals.

18c. More on N852: Use of library functions

18d. Japan's preliminary FCD comments
1.  Add reference to 'wcscoll' to Annex K.4.
2.  Modify description for the conversion specifier (e, f,
g): (finite) -> some new term.  Already have floating-point
meaning just finite (no infinity nor NaN).  Remove
"(finite)" in printf.
3.  Replace zero code with null character in
4.  Modify at 6.4p3:  Add UCN to list.

18f.  More on N852: strtod, strtof, and strtold

18f. Aliasing.  What is effective type of member of struct?
Just type of member, just type of struct, or both?  If both,
then breaks: pf.i++ + pf.j++; Will come back as a public

19a. [N847] (Feather) subgroup deliberations

19b. Floating-point future directions (MacDonald)
Future standardization may include additional floating-point
types, including those with greater range, precision, or
both, than long double.

Add to Common Extensions: Additional floating types may be
provided.  An extension floating type may have more range or
precision than long double, may be used for evaluating
expressions of other floating types, and may be used to
define float_t or double_t.

Also, add footnote to section that defines 3 float types to
point to these extensions.

19c. realloc rewrite (Meyers)
  The *realloc* function deallocates the old object pointed to
  by *ptr* and returns a pointer to a new object that has the
  size specified by *size*.  The contents of the new object
  shall be the same as the old object before deallocation up
  to the lesser of the size of the old object and *size*.  Any
  bytes in the new object beyond the size of the old object
  have indeterminate values.

  If *ptr* is a null pointer, the *realloc* function behaves
  like the *malloc* function for the specified size.
  Otherwise, if *ptr* does not match a pointer earlier
  returned by the *calloc*, *malloc*, or *realloc* function,
  or if the space has been deallocated by a call to the *free*
  or *realloc* function, the behavior is undefined.  If memory
  for the new object cannot be allocated, the old object is
  not deallocated and its value is unchanged.


  The *realloc* function returns a pointer to the new object,
  which may have the same value as *ptr*, or a null pointer if
  the new object could not be allocated.


  Page 32     Representations of Types -- General
  Page 296    The realloc function Wording changed to indeterminate (from unspecified)
to match malloc and current realloc.

19d. More on FOR loop.

20a. Infinity/NaN issues (Thomas)
math.h: 7.12 p4+5: infinity + NAN macros.  Implementation
defined was there for when the type was not defined.  Now,
they are specified as float, so, no need for implementation
defined.  No objection to remove.

20b. Aliasing issues (Peterson)
No new material since emails on reflector.

20c. strtok issues (Seebach)
strtok("a","b"); dumps core on at least implementation
because it writes a null over the null in the R/O string.
Principle: If prototype has no const, implementation is
allowed to write to argument.  Words will be added to

20d. More on Clive's 547 issues

20e. More on atexit.

20f. 3.18: undefined behavior: Should one be allowed to
access indeterminately valued objects thru unsigned char
types? (which is new with C9X): seems to say
that we can.  Intent of committee was can access.  Come back
as public comment.

20g. More on FOR statement

21. Separate WG14 administration and J11/U.S. TAG meetings
Karen Higgenbottom chair of NCITS joined meeting and
explained some of NCITS.  Electronic distribution of C++ is
going well.
*AI: Rex J. provide email address of NCITS Liaison (Tom Frost)
to J11.

Public comments section of their web page has documents for
public comments.  One HTML file of all comments as of the
current time.  Delegation: 3+1: Walls(HOD)+Jones+Seymour and
then Meyers (Portland), MacDonald (London).  November 10
public comments (US) ends.  November 11 - 25 for J11 letter
ballot on our position of FCD (which public comments should
go to WG14).  December 1 - 15 ballot on comments.  December
23 J11 position due to ITI.  January 8 ITI votes.  February
1-5 ballot resolution meeting (Portland).  If time at
Portland meeting, J11 resolve issues.
*AI: Rex Jaeschke talk to Tom Frost about ballot choices.
J11 members must also use official channels (Deborah Donovan,
202-626-5746, or

FCD National Body vote will be used as FDIS vote (by
default) unless we tell ITI otherwise.

Also vote if ISO standard should be used as ANSI standard.

Evening meeting: Annex D review.

Friday October 9th

22a. More on FOR loop issues (MacDonald)

22b. nextafterx name change (Thomas)
Change nextafterx to nexttoward to avoid name conflict if
extended floating-point type suffix of x.

22c. Annex D review report (Keaton)
Agreed that idea of formal model of sequence points is good.
BUT, model has flaws (floating-point flags, volatile), has
not been reviewed, examples have many bugs.  Suggest: Remove
Annex D now.  Have group work on rewrite on idea.  Once that
group comes up with well baked paper (technical report) and
get it added later to C2K or to C9X as amendment or to
Rationale at any time.  Not enough time for through review
now for C9X.  11 people for 2 hours subgroup meeting.
*AI: Perennial+Keaton: Provide words to Clive on Annex D
*AI: MacDonald: Feather #23 response. 

22d. Rationale status and schedule
Has received some comments (from Tydeman, Thomas).  Gwyn
will submit some soon.  Others plan to submit.  Do not know
if will have time at February (Portland) to review.  Plan on
working on Rationale in London.  Want to ship it by end of

23. Administration

23.1 Future Meetings

Greater Portland, Oregon. February 1-5, 1999. About
$60/night at hotel.  Might have another resolution meeting
after February if too many comments for February.

Meeting after next: 1999: June 21-25 in London, UK. BSI.
Same place as summer of 1997.

Sometime in October 18-22: Kona, Hawaii.  Try to meet along
with C++.  Not sure meeting is needed (June meeting will
tell).  Also, consider to have meeting span a weekend, so
can get better airfares. 
*AI: Plum to coordinate with C++.
Backup might be St. Louis, Missouri hosted by Seymour.

23.1.1 Future Meeting Schedule

23.1.2 Future Agenda Items
Deal with National body comments.  Deal with Rationale.

23.1.3 Future Mailings (sponsor for WG14 mailings)

Perennial has sponsored International Mailing for over a
year.  They would like someone else to pay for International
Mailing.  Postage: $150-200 per mailing.  Duplication:
$150-200.  Keaton will do next two mailings.

November 6 Post Santa Cruz deadline for mailing.

December 18 Pre Portland deadline for mailing.

23.2 Resolutions

23.2.1 Review of Decisions Reached
No decisions.

23.2.2 Formal Vote on Resolutions

23.2.3 Review of Action Items
[Look for *AI in this file]

23.2.4 Thanks to Host
Thanks to: SGI + Plum/Hall + Perennial
Thanks to: Keld Simonsen for local area network and net

23.3 Other Business
23.3.a: Revisit VLA and side-effects.
23.3.b: More on atexit.

23.3.c: Digital Signal Processing (DSP) C by W. Wakker, ACE
Associated Compiler Experts.  Too late for C9X.  N854 will
be posted.  Not like Hardware I/O. 

24. Adjournment
Meeting adjourned at 10:00 AM.