JTC1/SC22
N2369
Date: Tue, 31 Dec 1996 12:04:35 -0500 (EST)
From: "william c. rinehuls" <rinehuls@access.digex.net>
To: sc22docs@dkuug.dk
Subject: SC22 N2369 - WG21 Minutes of November 1996 Meeting
_______________________beginning of title page ____________________
ISO/IEC JTC 1/SC22
Programming languages, their environments and system software interfaces
Secretariat: U.S.A. (ANSI)
ISO/IEC JTC 1/SC22
N2369
January 1997
TITLE: Minutes of SC22/WG21 (C++) Meeting on November 10-
15, 1996 in Kona, Hawaii, USA
SOURCE: Secretariat, ISO/IEC JTC 1/SC22
WORK ITEM: N/A
STATUS: N/A
CROSS REFERENCE: N/A
DOCUMENT TYPE: WG21 Meeting Minutes
ACTION: To SC22 Member Bodies for information.
Address reply to:
ISO/IEC JTC 1/SC22 Secretariat
William C. Rinehuls
8457 Rushing Creek Court
Springfield, VA 22153 USA
Tel: +1 (703) 912-9680
Fax: +1 (703) 912-2973
email: rinehuls@access.digex.net
___________________end of title page; beginning of text _________________
Document Number: WG21/N1041
X3J16/96-0223
Date: 3 December 1996
Project: Programming
Language C++
Reply to: Sean A. Corfield
sean@ocsltd.com
WG21 Meeting No. 17
10 - 15 November 1996
The Royal Waikoloan Hotel
Kona, HI USA
1. Opening activities
Clamage convened the meeting as chair at 8:37 HST on Monday, 10
November 1996.
Miller was vice-chair, and Corfield was the secretary.
Plum Hall (represented by Plum) hosted the meeting.
1.1 Opening comments
Clamage noted there were fewer members than we might have expected for
a North
American meeting but that there were some new members at this meeting.
1.2 Introductions
Clamage announced that Corfield was taking over secretarial duties from
Saks and
the committee thanked Saks for all his hard work over the last seven years.
Applause.
Corfield circulated an attendance list each day, which is attached as
Appendix A
of these minutes. Miller circulated a copy of the membership list (SD-2 =
96-0001) for members to make corrections.
1.3 Membership, voting rights, and procedures for the meeting
Clamage reminded the attendees that this is a co-located meeting of WG21 and
X3J16. (The joint membership is denoted WG21+X3J16 in these minutes.)
Clamage explained the voting rules:
In straw votes, all WG21 technical experts may vote, even those who haven't
attended previous WG21 meetings. An X3J16 attendee may vote only if he/she
is the voting representative of a member organization that has met the X3's
meeting attendance requirements. (The voting representative is the principal
member, or an alternate if the principal is not present.) A WG21 technical
expert who is also an X3J16 voting member still casts only one vote in a
straw vote.
In WG21 formal votes, only the head of each national delegation may vote.
In X3J16 formal votes, only one representative from each X3J16 member
organization may vote, and only then if the organization meets the
attendance requirements.
Plum explained the facilities provided (and warned about the dangers of the
sun). Plum noted that authors of proposals would have to copy their own
documents at this meeting. This should reduce the number of proposals.
Laughter. He explained that a Sparcstation is available but since it will be
used to typeset the WP at this meeting it should not be used without
permission from Koenig. Koenig noted that he can produce printed copies at
any point during the week.
Miller explained the procedure for document number allocation at this
meeting.
Miller asked that electronic copy of all documents produced at the meeting
be provided to him before the end of the meeting. Diskettes have been
provided for this purpose.
1.4 Distribution of position papers, WG progress reports, WG work plans for the
week, and other documents that were not distributed before the meeting
There were no position papers or progress reports. Work plans will be
covered by
item 1.6 below.
1.5 Approval of the minutes of the previous meeting
Saks said that he had not received any corrections to the previous minutes.
Motion by Rumsby/Lajoie:
Move we approve N0952 = 96-0134 as the minutes of the previous meeting.
Motion passed X3J16: lots yes, 0 no.
1.6 Agenda review and approval
Clamage deferred this item until after discussion of the organisation of
subgroups below.
1.7 Report on the WG21 Sunday meeting
Plum summarised WG21's discussion about prioritising issues: if the
consensus is
that we are entitled to fix something, we can actually apply a fix,
regardless of the resolution at Stockholm in support of a feature freeze. He
noted that we should not search for editorial problems just for their own
sake because fixing them might cause ripple effects and be destabilising. We
should concentrate on locating and fixing what are deemed by consensus to be
bugs. He reported that all NBs present were strongly in favour of ensuring
we ship CD2 at the end of this week.
1.8 Liaison reports
Benito presented the WG14 liaison report. long long has been officially
adopted.
Clamage asked what WG14's position is on removing implicit int. Benito
replied that WG14 was in favour of removing implicit int and expected an
affirmative vote at the next WG14 meeting. Benito noted that WG14 has
adopted the general position not to accept any further language extensions
in order to expedite the issue of C9X. He said that the translation limits
concerning external names had been relaxed so that case is now significant
and that the first 31 characters of names are significant. Brck asked about
the sign of the remainder in division. Benito believes the resolution has
been incorporated to adopt the FORTRAN approach.
No other liaisons were present.
1.9 New business requiring actions by the committee
There was no new business.
2. Working Paper for Draft Proposed Standard
Koenig said he normally gives the Editorial report in General session
but was
happy to give it today.
2.1 Changes in the Working Paper
Koenig said there were a large number of editorial volunteers who
continued to
work on the WP after the pre-Hawaii mailing. He said the numbers of changes
are reducing so it looks like we are approaching closure. Koenig thanked
everyone who helped with the editing. He noted that only a few "bold
changes" were made this time and they were all in lib-iostreams. The
relevant box numbers were 42(27.2), 45(27.3), 47(27.4.1), 49(27.4.5.1),
53(27.6.1.3), 55(27.7.1.3), 58, 60(27.8.1.4). Koenig said he will tighten up
the tracking of changes to resolutions from this meeting onwards as it
becomes more important to ensure no inadvertent changes get made. Plum
confirmed that during this week only a limited number of hands-on editors
will actually touch the document. Koenig encouraged those who could do so to
review the WP in electronic form (PDF) rather than on paper "to conserve
trees". Schwarz asked if we have a version of the WP as it is now rather
than as it was in the mailing. Koenig said no, but he can easily produce
such a version. Rumsby and Koenig agreed to liaise to produce PDF from the
PostScript for distribution to those at the meeting who need it. Stanchfield
asked for a plain ASCII text version to work from. Koenig said this may be
possible but is very time-consuming.
Motion by Lajoie/Dawes:
Move we approve N0996 = 96-0178 as the current Working Paper.
Motion passed X3J16: lots yes, 0 no.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
3. Organise subgroups, chapter editors, and chapter reviewers. Establish working
procedures
Clamage reiterated our intention to approve the current draft for
submission as
the second Committee Draft. The intent is to have two votes at the end of
this meeting:
* approve the modified draft prepared at this meeting as the current Working
Paper, and
* submit that Working Paper as the second Committee Draft.
Dawes named the editors for the library clauses: Schwarz for iostreams,
Rumsby
and Dawes for the rest. Clamage said that Plum has the master list of
editorial volunteers and asked that potential volunteers check with Plum.
Clamage explained that nominated reviewers will examine each clause to
ensure that the resolutions have been correctly incorporated and that no
other substantive changes are made by accident.
Lajoie said there would be three core groups at this meeting. They
would meet
separately on Monday and jointly on Tuesday. Dawes said that four library
issues overlap with core group work but otherwise the library groups will
work together.
Clamage announced a technical session on allocators. Dawes will use the
feedback
from the technical session to direct the WG's discussion.
Comeau asked Lajoie to explain the topics covered by each core group. Lajoie
listed what each Core WG would be covering. Clamage noted that Benito would
chair the C Compatibility WG in conjunction with the Core WGs. Lajoie said
the C Compatibility issues are mainly to do with Annex C. Gafter asked
whether there would be a Syntax WG. Lajoie said this would be handled by
Core since there is only one outstanding issue.
3.1 Agenda review and approval
Motion by Glassborow/Lajoie:
Move we approve N1002 = 96-0184 (with agenda approval as item 3.1
instead of
1.6) as the agenda for this meeting.
Allison asked for clarification prior to the vote. Clamage read out the
agenda
items because not everyone had a paper copy. Anderson asked if we would have
straw votes at this meeting. Clamage said the process was intended not to
need straw votes. He said two of the issues that might need further
discussion are allocators and export/extern. Unruh suggested that we have
straw votes on demand for potentially controversial issues in General
session I. There was general agreement on this suggestion.
Miller noted a change to X3J16 voting procedures. It is now permissible to
abstain on technical and procedural votes. He noted that votes on motions
such as affirming document transmittal still require no abstentions and a
two-thirds plus one majority.
Motion passed X3J16: lots yes, 0 no.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
The committee recessed to WGs at 9:55 on Monday.
4. WG sessions
5. WG sessions
The committee reconvened at 8:23 on Wednesday.
6. General session I
Clamage explained that subgroup chairs will present briefly the issues to be
incorporated and take questions. After each group of issues, we will vote on
the whole group of proposals. Straw votes can be conducted on demand. Formal
votes will be taken for each group of issues presented.
C Compatibility (Benito)
Benito said there were 11 editorial issues, three of which concerned
Annex C.
Benito said the Annex needs to be updated but the WG have not done so
because the text is non-normative. Gafter asked whether we should vote on
keeping versus removing the Annex. Benito said we have no volunteers to
update the Annex. Benito noted that there was a UK NB comment that part of
Annex subclause C.1 should be removed.
Clamage asked if the WG made any changes. Benito said they have produced two
documents listing changes made: N1035 = 96-0217 which lists the editorial
core issues closed and N1036 = 96-0218 which documents the changes made to
clause 16 (mainly changing the use of "shall"). Miller asked for
clarification of some of the changes. Nelson said the WG clarified that
#undef __STD__ is implementation-defined (because it is
implementation-defined whether or not __STDC__ is actually predefined).
Benito said no issues needed a committee vote.
Library I (Dawes)
Dawes presented the motions in N1020 = 96-0202. Dawes noted the following
corrections to the distributed copy:
In item 1, delete the two lines beginning:
os.putc() in turn for...
In item 2, the correct document number is N1018 = 96-0200.
In item 4, the correct document number is N1017 = 96-0199.
Dawes then discussed each item in turn.
Item 1. He said the issues closed with no action (21-090, 21-095 and
21-111 from
N1006 = 96-0188) were made moot by io-related issues closed in Stockholm. He
said the proposed resolutions for 21-113, 21-115 and 21-116 corrected a
typo, clarified the interaction of ios::width with strings and added a
clear() member function.
Corfield noted an error in the proposed resolution for operator<< effects:
str.iterator
should be:
basic_string< ... >::iterator
Item 2. Clarify that the exception string is required to have the same
spelling
but not necessarily to point to the same data.
Item 3. Add a specific definition of "equivalence" relationship for
EqualityComparable requirements and resolve several issues concerning
utilies.
Koenig asked for an explanation of the resolutions concerning
auto_ptr<> because
of the controversy on the reflector. Dawes said the issue of conversions was
resolved by using "implicitly converted" which is a well-defined term in the
WP. The second issue clarified the behaviour of repeated assignment. Colvin
said the WP was contradictory in this area. The resolution is to clarify
that repeated assignment of one auto_ptr<> object to another causes a
dangling pointer. The third issue is the destructor: the resolution is to
require that delete get() is a well-formed expression in order to
instantiate the template.
Dawes then explained the resolutions covering explicit declarations of copy
constructors and assignment operators. Corfield asked for clarification as
to why the default complex copy constructor and assignment operator are
necessary. No one seemed to know. Myers commented that this motion adds a
member (auto_ptr<>::operator=) that another motion proposes deleting. The
motion was left unchanged.
Item 4. Clarify which names are in namespace std and resolve some exception
issues.
Gafter asked for clarification of "library entities" mentioned in regard to
names in namespace std. Dawes said this is defined in the previous
paragraph. Unruh noted that the name std itself must be in the global
namespace and that we should be clear that other nested namespaces are
allowed (instead of just rel_ops). Corfield asked whether it would be clear
that new & delete would be in the global namespace. Dawes said yes.
The clarifications on exception handlers were non-controversial.
Item 5. Remove wording inherited from C dealing with external linkage
names in
the library (since it is not necessary because the names live in namespace
std).
Unruh noted that an extern "C" linkage function in a namespace may
affect the
use of the name somewhere else (in the user program). We have no wording to
cover this. Spicer asked whether the issue of extern "C" versus extern "C++"
linkage for C library functions had been discussed. Dawes felt there was a
lot of concern about this proposal and maybe he should withdraw it. Austern
said the concerns expressed covered other clauses than those affected by
this motion. Dawes wanted to drop item 5 from his motions. Spicer asked his
question again. Dawes said there are no open issues regarding this
unspecified linkage. Spicer explained that this means it is impossible to
write a portable program using, e.g., qsort since we do not know the linkage
of the pointer to function argument.
Item 6. Clarify which namespaces are not extensible.
Myers asked if we have specified what can be specialised. Dawes said yes.
Item 7. Clarify intent of default argument specification on template member
functions in the library.
Ball noted that explicit should not be on all three constructors in the
example.
Plum said we expect this issue to be revisited during the CD2 ballot
process. Corfield asked about the wording elsewhere concerning default
constructible types in containers. Plum said this would also be revisited.
Motion by Dawes/Rumsby:
Move we modify the WP as specified in N1020 = 96-0202, items 1-4,
6, 7 (with the
corrections noted above).
Motion passed X3J16: lots yes, 0 no, 0 abstain.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
Core I (Lajoie)
Lajoie presented the motions in N1031 = 96-0213.
Item 1. Resolve Core issue 666 and clarify that a namespace name does
not hide a
class name used as a base class or in an elaborated-type-specifier.
This was non-controversial.
Item 2. Resolve Core issue 727 and clarify which namespace block extern
declarations refer to.
O'Riordan asked what "have linkage" means. Miller explained that it
meant the
declaration will not have "no linkage" and this is made clear by the
following text.
Item 3. Clarify semantics of friend declarations in local classes.
Gafter felt this was a complicated proposal solving a minor problem and
would
prefer to deprecate or remove friends in local classes. Lajoie said this
motion clarified the pre-Stockholm intent. Gafter asked for a straw vote on
a friendly amendment to deprecate friends in local classes. Lajoie said no.
Plum reiterated our charter for this meeting and said that Gafter's
suggestion was outside that charter despite being a reasonable one.
Item 4. Resolve Core issue 674 and clarify class name lookup and
ambiguity in
the presence of using-declarations.
This was non-controversial.
Item 5. Resolve issue 675 and clarify the definition of final overrider
in the
presence of using-declarations.
Ball was surprised that the resolution was different to what had been
agreed in
the Core WG (to make the proposed usage ill-formed). Gafter said some
members of the WG later decided this was too strict and so the proposal just
clarifies that using-declarations cannot affect final overriding. Lajoie
said we could vote on this separately if the committee wants. Ball expressed
concern about this change from the WG's resolution. Glassborow said the WG
making the usage ill-formed would break a lot of code since this style of
using-declaration should be a standard idiom to bring in names from base
classes. Plum asked whether this was a NB issue. Lajoie said no, it was a
core issue. She said the WG identified this as a bug in the WP. Anderson
said he shared Ball's concern but felt we should accept the clarification
because it matches the behaviour of final overriders with access
declarations.
Lajoie asked for a straw vote for incorporating this change in the
motions but
keeping it on the issues list. The straw vote passed: 17 in favour / 5
opposed / 5 none.
Item 6. Resolve Core issue 700 and indicate that a diagnostic is not
required
when a function or object is used but not defined.
Corfield asked why no diagnostic was required. Unruh said that a use in dead
code should not require a diagnostic. Brck asked if the WP is clear but
said he felt this is a desirable change anyway. Lajoie said yes the WP was
clear but considered by the Core WG to be unworkable. Miller clarified that
it restores the pre-Stockholm intent for virtual functions. We do not want
to require definitions for unused virtual functions. Koenig asked for
confirmation that "undefined behavior" was considered an improvement. Plum
believes there are a dozen instances where the WP expects the linker to
diagnose problems so this change makes very little difference. He also said
that this change would help just-in-time development environments or
interpreted systems. Plum asked if we should consider requiring that a
diagnostic appears "at some time" prior to calling the undefined function
but was not sure what approach we should take. Gafter said this muddles the
phases of translation.
Anderson felt the wording in the proposal should refer to wording for inline
functions. Lajoie agreed that the wording could be improved. Lajoie said
that we will be revisiting conformance issues during the CD2 ballot process
(since it is a long-standing NB issue) so the issue of diagnostics will come
up again. Glassborow was unhappy that we seemed to be pushing more fixes
into the CD2 ballot period.
Item 7. To only require a static member to be defined if it is used.
Lajoie explained that this helps templates because static data members
do not
need to be instantiated. Glassborow objected that this removes a way of
providing constraints on templates. Ball said this was taking advantage of
an implementation quirk. Gibbons said the status quo effectively requires
that unnecessary instantiations and attendant side effects take place and we
should remove this requirement (i.e., accept the proposal).
Item 8. Resolve Core issue 728 and clarify how linkage-specifications affect
object declarations and definitions.
Lajoie said this follows the ARM. Corfield asked for clarification that the
proposed wording really did match the WG resolution. Miller and Lajoie
confirmed that it did. Unruh suggested a better example be provided in the
WP text.
Item 9. Resolve Core issues 635 and 725, render recursive local static
initialisation undefined and allow early initialisation.
Unruh asked for clarification that this matches the rules for names in
namespace
scope. Gafter said yes.
Item 10. To clarify when an implementation may create temporaries.
Lajoie explained the the motion clarifies precisely when temporaries may be
created and when their lifetimes are longer than the full expression.
In response to O'Riordan's earlier comment, Miller noted that the
omission of
the external linkage specification on item 2 above was an editorial slip on
his part.
Motion by Anderson/Lajoie:
Move we amend the WP as specified in N1031 = 96-0213.
Motion passed X3J16: lots yes, 0 no, 0 abstain.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
Lajoie presented another motion from an unnumbered paper distributed at the
meeting. The motion proposes that a program be ill-formed if an unambiguous,
accessible delete operator cannot be found using the usual lookup rules at
the point of definition of the destructor. Corfield asked for clarification
that the proposal breaks a useful idiom concerning declaring operator
delete() private in a base class in order to restrict dynamically allocated
uses of a class. Lajoie said yes.
Motion by Lajoie/Hartinger:
Move we amend the WP to clarify accessibility and name lookup of
operator
delete().
Motion passed X3J16: 18 yes, 3 no, 9 abstain.
Motion passed WG21: 3 yes, 1 no, 1 abstain.
Core II (Adamczyk)
Adamczyk presented the motions in N1033 = 96-0215.
The first few issues covered small corrections to the handling of
cv-qualification. Adamczyk explained that these mainly covered incorrect
handling of void* and multi-level pointer cases by introducing the term
"cv-qualification signature". Schwarz asked if this made pointer comparisons
more compatible with C. Adamczyk said yes.
Adamczyk explained the proposed clarification that no lvalue-to-rvalue
conversion occurred for void expressions because of extra cases where C++
produces lvalues. In some of these extra cases, such conversions are
undesirable. This introduces a minor difference from C for volatile
variables:
volatile int i;
i; /* fetched in C */
// not fetched in C++
Adamczyk then clarified that (void)x; is same as the implicit case x;.
Koenig asked for clarification of the following:
struct x;
x& f1();
x f2();
f1(); // OK, value not used
f2(); // ill-formed (still)
Adamczyk said yes this is the proposed behaviour.
The next item is a clarification that cv-qualification is significant
on member
function calls when constructing the candidate set.
The last item adds a pseudo-prototype for ->*. Unruh expressed concern about
overload resolution being correct for this prototype. Gafter said that there
will (still) be ambiguous cases but this is probably a better formulation.
Adamczyk said that Core II left the pseudo-prototype for ?: broken but these
cases will be revisited during the ballot process. Corfield asked for
confirmation that the delayed issues will be put forward through public
comment / NB comment channels. Adamczyk said that was his intent.
Unruh said he is unconvinced that the current ->* prototype is wrong.
Adamczyk
dropped that motion.
Schwarz expressed concern over the amount of churn in pseudo-prototypes and
asked whether we should just leave them alone. Adamczyk basically agreed but
said the WG is trying to fix only those problems that are genuinely
considered to be broken. Schwarz asked how broken something has to be.
Adamczyk said if it broke a "simple" example it was considered broken
enough. Brck said we don't have time to discuss what is broken but only
what can be fixed.
Motion by Welch/Lajoie:
Move we amend the WP as specified in N1033 = 96-0215 (without the motion
concerning the pseudo-prototype for ->*).
Motion passed X3J16: lots yes, 0 no, 2 abstain.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
Core III (Gibbons)
Gibbons presented the motions in N1032 = 96-0214.
Item 1. Clarify the semantics of uncaught_exception().
Welch asked for clarification that uncaught_exception() remains true
when there
are nested exceptions active even when the top exception is caught. Gibbons
said yes. Hartinger asked for clarification that this only applies to
implicit calls. Gibbons said yes, because the library already specifies that
user calls have different semantics. Stanchfield asked for clarification
that user calls to terminate() do not affect the result
uncaught_exception(). Gibbons said yes.
Item 2. Clarify the semantics of dynamic_cast<>().
Ball made a correction to the motion by inserting "public" before
"unambiguous
base class". Gibbons explained the intent of the motion was simply to fix a
bug in the WP.
Item 3. Clarify the semantics of throwing an array or function type.
Gibbons explained that the motion clarifies that array to pointer and
function
to pointer-to-function conversions occur at the point of the throw. Gafter
asked why the existing wording for conversions was not used. Gibbons said
this was editorial. Brck asked whether catch of an array type could catch a
pointer thrown by a throw. Gibbons said yes, just like a function parameter
declared as an array can accept a pointer. Spicer said this was existing
practice (because you have to do the decay on the throw expression anyway).
Gafter corrected the motion by deleting "pointer to" from the return type of
the result of converting the function type.
Item 4. Clarify when templates are instantiated during a trial parse.
Unruh said the proposed wording was contradictory. Gibbons agreed that the
wording was imprecise. Unruh said semantic analysis is required during trial
parse. Gibbons agreed and said the wording needing revising.
Item 5. Clarify the interaction of using-declarations and default arguments.
Gibbons used the following example to illustrate the resolution:
namespace A { void f(int); }
using A::f;
namespace A { void f(int = 0); }
void g() {
f(); // proposed to be valid
}
A previous unintentional change had made this ill-formed because it did
not take
any subsequent declaration's default argument into account.
Item 6. Clarify when overload resolution causes class template
instantiation.
Corfield asked why the WG left it unspecified. Gibbons said that in the
general
case it is not guaranteed that overload resolution can determine this in any
reasonable time-it is a tradeoff. Hartinger asked if this was a portability
problem. Ball said the same function is always selected but whether or not
an ill-formed instantiation is attempted is implementation-defined (so a
program may compile on one system but not on another).
Item 7. Clarify the set of names considered for dependent lookup.
Miller thought that namespace of an enumerator should be added in to
the set.
Gibbons said the WG felt this was unnecessary complexity for a corner case.
Unruh wanted clarification of when no namespaces are considered. Gibbons
agreed this is editorial.
Item 8. Clarify exception type matching.
This was non-controversial.
Item 9. Clarify that member templates do not suppress the implicit copy
constructor and assignment operator.
Corfield asked for confirmation that this was the resolution of the WG in
Stockholm that had not been adopted into the WP. Gibbons said yes.
Item 10. Specify additional contexts where a dependent qualified name
is assumed
to be a type.
Gibbons showed the following example:
template<class T> struct A {
struct B { B(int); };
}
template<class T>
struct C : A<T>::B { // typename not allowed here
C();
};
Gibbons explained that the grammar does not allow typename here but the
context
requires a type. The resolution is to assume it is a type. Similarly for
base class mem-initialisers since these are also known to be types by
context although typename is not allowed by the grammar.
Gafter asked what happens if something assumed to be a class type turns
out to
be a namespace. Gibbons said that such names cannot appear in dependent
qualified names.
Item 11. Clarify that friend class T; not permitted.
This was non-controversial.
Item 12. Clarify that "reference to function" and "pointer to member"
types can
have exception specifications.
Gibbons said this was a simple omission and should be considered editorial.
Item 13. Clarify that dereferencing a pointer to member requires a complete
class type.
This was non-controversial.
Item 14. Clarify that types in exception specifications must be complete.
Ball noted that this was already fixed in the November WP.
Item 15. Add "export" to list of keywords.
Gibbons said he would discuss this decision in more detail later.
Item 16. Correct the grammar specification involving templates.
Lajoie asked about where template is allowed in qualified names.
Gibbons said
the proposed changes to the grammar were not substantive so if that isn't
specified, this proposal would not fix that. Lajoie said she would
investigate further.
Motion by Ball/Spicer:
Move we amend the WP as specified in N1032 = 96-0214 (with the
corrections noted
above).
Motion passed X3J16: lots yes, 0 no, 0 abstain.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
Gibbons said the issue of export versus extern did not need a vote. At
Stockholm
we agreed to adopt export and revisit the issue in Kona. Gibbons explained
that the WG discussed the choice of keyword at length and felt that extern
is too confusing. The WG agreed that export might break code. Gibbons noted
that this may come up again in a NB comment so he will provide a document in
the post-Kona mailing N1034 = 96-0216 detailing the discussions of the WG.
Myers expressed his dissatisfaction with the subtle difference between
export and extern.
Library - allocators (Austern)
Austern presented N1027 = 96-0209 which is a motion to adopt the changes
proposed in N1021R1 = 96-0203R1 (not N1008 as stated in the version of N1027
initially presented). Austern said there are several small non-controversial
changes. Corfield noted that at least one member of the committee (not
present in Kona) feels the restrictions on reference and const_reference are
controversial.
Austern explained the proposed restrictions placed on allocators by the
standard
containers. Brck feels that it is not clear which problems in N1011 =
96-0193 are solved by this proposal and asked that Austern write a document
clarifying this. Austern agreed that this was a good idea. Brck was
concerned that the specification "pointer to T" was not clear however he
feels that the proposal is an improvement over the WP. Dawes asked whether
the small WG involved in writing the proposal was in agreement. Austern said
yes but Corfield disagreed. Corfield felt the proposal was too restrictive
but there was an agreement that Austern and Corfield would work on
specifying the requirements on pointer and const_pointer with a view to
submitting comments through NB channels during the CD2 ballot process.
Clamage observed that everyone involved agreed that they can live with the
compromise. Dawes asked Plauger for his opinion on the proposal. Plauger
said he was pleased with the progress made and he is in favour of the
proposal. Brck noted that the proposal does not satisfy his requirements.
General acknowledgement of Koenig's role in helping establish consensus on
this issue.
Rumsby called a caucus of the UK delegation to discuss the proposal
prior to the
vote.
Motion by Allison/Corfield:
Move we amend the WP as specified in N1021R1 = 96-0203R1.
Motion passed X3J16: lots yes, 0 no, 2 abstain.
Motion passed WG21: 3 yes, 1 no, 1 abstain.
Library II (Becker)
Becker presented the motions in N1023 = 96-0205.
Becker explained that the motions were mostly editorial and minor bug fixes.
Motion 1. Close some issues from N1014 without taking action.
Motion 2, Item 1. Clarify that containers copy their comparison object.
Item 2.. Clarify that pointers to functions may be used where comparison
objects
are mentioned.
Schwarz asked whether an object with a conversion to function type
would work.
Becker said no, conversions are not performed for () operations.
Item 3. Correct the Returns section for operator<< on bitset.
Item 4. Clarify the semantics of the bitset constructor taking a string.
Myers noted that the bitset constructor needs to be a template member
constructor. Becker agreed to revisit this later.
Item 5. Clarify the semantics of capacity().
Item 6. Clarify vector<>::assign() description by renaming the template
parameter.
Item 7. Make the value comparison operators on map and multimap into const
member functions.
Item 8. Correct a typo in the Effects section of resize() in several places.
Item 9. Correct a typo in the declaration of the reverse_iterator
member typedef
in several places.
Item 10. Systematically replace the remaining uses of distance_type with
difference_type.
Austern asked when the decision was made to use difference_type instead of
distance_type. Becker said people felt it was more important to have a
consistent name. Schwarz asked why we were making an essentially aesthetic
change at this stage. Myers obtained clarification that iterators used
distance_type and everything else used difference_type. Plauger disagreed
and said the use of the two type names was not that clear cut. Brck asked
specifically whether there was a reason to keep them distinct. The answer
appeared to be no.
Becker called a straw vote on changing distance_type to difference_type:
Straw vote passed: 23 yes, 2 no.
Becker said the change to the bitset constructor will be dropped from
the motion
(issue 23-068).
Motion by Rumsby/Colvin:
Move we amend the WP as described in N1023 = 96-0205 without the
resolution to
issue 23-068.
Motion passed X3J16: lots yes, 0 no, 0 abstain,
Motion passed WG21: 5 yes, 0 no, 0 abstain.
Becker presented the motions in N1024 = 96-0206.
Motion 1. Close issue 24-021 from N1015 = 96-0197 without action.
Myers asked for clarification of 24-021. Becker said that stream
iterators would
remain in the header <iterator>. Corfield asked why. Becker said the WP is
not broken and moving types between headers might break something.
Motion 2, Item 1. Clarify intent of proxy class.
Becker noted that 24-038 has a revised resolution compared to the
paper. Instead
of removing the proxy class altogether, the concept of a proxy class remains
but the name is no longer specified (i.e., it does not have to be called
proxy).
Item 2. Clarify that insert_iterator and ostream_iterator post-increment
operators must return a reference rather than a value.
Plauger noted that this was necessary in order to make the operators
implementable.
Item 3. Resolve issue 24-044 by adding typedefs to the iterator traits.
Becker explained that this makes reverse iterators easier to implement.
Item 4. Resolve issue 24-045 by adding semantics for istream_iterator and
ostream_iterator.
Item 5. Specify the missing semantics in Table 86, 24.1.5
[lib.random.access.iterators].
Motion by Rumsby/Glassborow:
Move we amend the WP as specified in N1024 = 96-0206 (with the amended
resolution to 24-038).
Motion passed X3J16: lots yes, 0 no, 0 abstain.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
Becker presented the motion in N1025 = 96-0207.
Becker said this was a decision to retain the status quo by not moving some
algorithms into utilities and closes issues 25-015, 25-016 and 25-017 from
N1016 = 96-0198.
Motion by Colvin/Rumsby:
Move we retain status quo on the location of these algorithms.
Motion passed X3J16: lots yes, 0 no, 1 abstain.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
Becker presented the motions in N1026 = 96-0208.
Becker said these are mostly editorial changes to numerics.
Item 1. Clarify the description of the valarray destructor.
Koenig said we could encourage implementations to return memory by using
"should". There was no general support for this. Saks suggested the wording
"may invoke a deallocation function". Brck asked that we not wordsmith in
full committee.
Item 2. Remove free().
Item 3. Change signature of resize() to have a value parameter instead of a
reference parameter.
Corfield asked whether this affects any other resize() members. Becker
said all
the others have value parameters already.
Item 4. Close issue 26-055 by correcting the description of shift and rotate
operations.
Motion by Rumsby/Dawes:
Move we amend the WP as described in N1026 = 96-0208.
Motion passed X3J16: lots yes, 0 no, 0 abstain.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
Library III (Schwarz)
Corfield noted the document numbers said 95- instead of 96-. Schwarz will
correct these for the mailing.
Schwarz presented the motions in N1029 = 96-0211.
Item 1. Add Allocator parameter to use of basic_string.
Ward corrected the declaration of the template to:
template<class charT, class Traits, class Allocator>
bool operator()(const basic_string<charT,Traits,Allocator>& s1,
const basic_string<charT,Traits,Allocator>& s2)
Item 2. Clarify the widen/narrow operations on basic source character set.
Item 3. Add unshift() member function to codecvt.
Schwarz mentioned the impact on seek() (in a later proposal). Plauger
felt that
seek() did not need this change. Schwarz said there was otherwise no way to
write the "magic" (i.e., unshifting) characters out at the right place.
Myers argued that writes on seek() already happen (when a buffer is flushed)
and this is very similar. Plauger argued that this change is a very bad
idea-seeking and writing over a multibyte file is "asking for trouble".
Motion by Schwarz/Brck:
Move we amend the WP as described in N1029 = 96-0211.
Motion passed X3J16: lots yes, 0 no, 1 abstain.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
Schwarz presented the motions in N1028 = 96-0210.
Item 1. Fix typedef of iostream.
Item 2. Add typedef for wiostream.
Item 3. Ensure initialisation of predefined streams.
Schwarz noted that a footnote will be added encouraging implementors to
initialise the streams "as early as possible".
Item 4. Eliminate requirement that predefined streams be unbuffered.
Schwarz explained that the phrase "unbuffered" should be removed from
several
locations because it misleads users. Plauger asked for confirmation that the
streams are still synchronised. Myers said yes.
Item 5. Add #include <iosfwd> to <ios> and remove the forward declarations.
Item 6. Describe failure of iword and pword.
Make iword and pword set badbit on failure. Schwarz noted that even if these
functions fail, the WG agreed that they should return valid references (this
is not reflected in the proposed WP changes). Myers noted that the returned
reference must refer to zero-initialised memory. Schwarz agreed to correct
the motion.
Item 7. Fix definition of ios destructor.
Item 8. Remove use of traits::newline and change get to avoid default
argment.
Item 9. Fix reference to failbit.
Item 10. Fix a typo.
Item 11. Replace traits::newline with widen('\n').
Item 12. Fix argument of setfill to match Stockholm resolution.
Item 13. Correct template arguments in uses of basic_string.
Item 14. Add declaration of fstream and wfstream typedefs.
Item 15. close() should flush and use unshift().
Item 16. filebuf::seekoff should understand codecvt.
Item 17. Change semantics of seek() for variable encodings.
Schwarz withdrew the change to seek() that would have called unshift().
Myers
asked where the wording was to ensure seek() flushed the buffer. Schwarz
agreed to add it.
Item 18. Specify filebuf::sync and add precondition for filebuf::imbue.
Historically this is for throwing away lookahead characters but it doesn't
really work so the semantics of sync() now make that clear.
Schwarz noted that there was a missing phrase in the WP text proposed.
Motion by Schwarz/Stanchfield:
Move we amend the WP as described in N1028 = 96-0210 (without the
change to the
semantics of seek()).
Motion passed X3J16: lots in yes, 0 no, 0 abstain.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
Schwarz presented the motion in N1030 = 96-0212 that fixes a typo in
Annex D.
Motion by Schwarz/Brck:
Move we amend the WP as specified in N1030 = 96-0212.
Motion passed X3J16: lots yes, 0 no, 0 abstain.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
Library II (Becker)
Becker presented a motion with the revised bitset constructor
declaration. He
noted the detailed text in the WP is correct but the synopsis is wrong. This
motion corrects the synopsis.
Motion by Allison/Brck:
Move we amend the WP to correct the constructor synopsis for bitset.
Motion passed X3J16: lots yes, 0 no, 0 abstain.
Motion passed WG21: 5 yes, 0 no, 0 abstain.
7. Preparation of the new DWP
Dawes asked Library I and II to meet and work on editorial and review
actions
for the WP. Lajoie asked that Core get together as well.
Koenig described the review procedure he wants to have actioned. He
will provide
a baseline against which each editor should produce diffs. He described
exactly the procedure he wants everyone to follow. He noted that differences
on printed copies will be against the 7 November version made available at
this meeting but in the post-Kona mailing-IF WE PRODUCE ONE-will be against
the pre-Kona version.
Plum clarified that we will produce review copies of the modified WP in
PDF form
on diskettes. Rumsby, Clamage and Koenig will deal with this translation.
Allison asked that a paper copy be made available in the "office".
There was a lot of discussion about the process at this meeting in terms of
ensuring that what we end up voting on as the WP reflects the resolutions we
have voted on today. Plum explained that we will exercise due diligence but
ultimately we will be voting on one document which we must assume (or have
checked) matches the resolutions. Corfield confirmed that all the
resolutions will be documented in the minutes.
Dawes asked who will edit the Annex clauses. Schwarz will edit Annex D.
Benito
will edit Annex C.
The committees recessed at 17:00 on Wednesday.
X3J16 reconvened at 9:20 on Thursday.
Review public comments
Clamage asked for a show of hands to count voting members of X3J16. 24 hands
were raised. Clamage explained that the purpose of this session was to
review and confirm the response to the public comments.
Motion by Miller/Lajoie:
Move we accept N1003 = 96-0185 as the response to public comments.
Clamage asked for discussion and corrections.
Motion to amend by Gafter/Welch:
Move we amend N1003 = 96-0185 as described in in N1009 = 96-0191.
The amendment passed X3J16: lots yes, 0 no.
Gafter noted that one of the responses is no longer correct because of
changes
made to the working paper recently. The response concerns C Linkage (page 4,
right hand column, item 4). Gafter suggested that it should read:
"Rejected. All conforming C++ implementations are required to support
extern "C"
as defined by the standard, however an implementation is not required to
support a C implementation that interoperates with it."
Plum felt we should not attempt to go beyond what is necessary for our
stated
procedure. There is no normative requirement that the responses be correct.
He noted that we may yet find more errors in our responses but we should not
spend too much time on this. Koenig asked if we can provide a cover letter
indicating that the response was to CD1 comments and that events since may
have changed the status of the responses. There was agreement on this.
Motion by Gafter/Koenig:
Move we amend N1003 = 96-0185 as described above.
The amendment passed X3J16: 17 yes, 1 no, 6 abstain.
The formal vote on the amended motion was then taken.
The amended motion passed X3J16: 27 yes, 0 no, 0 abstain.
X3J16 recessed at 10:30 on Thursday.
WG21+X3J16 reconvened at 9:15 on Friday.
9. Review of the meeting
Clamage expressed his pleasure at how well the meeting has progressed.
Applause.
9.1 Formal motions
Plum clarified that the motions are advisory and therefore do not
require the
two-thirds plus one vote for X3J16. Koenig asked reviewers to sign the diff
documents. Plum suggested that the minutes record the editor and reviewers
for each clause. Koenig agreed to provide that information to the secretary.
Plum said the intent is to show we followed due diligence. Koenig confirmed
that he received edits from the nominated editors and that each clause was
reviewed by one or more reviewers.
Clause Editor Reviewer(s)
intro Miller Nelson
lex Miller Nelson
basic Lajoie Unruh and others
conv Adamczyk Miller
expr Adamczyk Miller
stmt Adamczyk Miller
dcl Lajoie Unruh
decl Adamczyk Miller
class Lajoie Unruh
derived Lajoie Unruh
access Adamczyk Miller
special Lajoie Unruh
over Adamczyk Miller
template Gibbons Unruh
except Gibbons Brck
cpp Plum Benito
lib-intro Rumsby review group
lib-support Rumsby review group
lib-diagnostics Rumsby review group
lib-utilities Rumsby review group
lib-strings Rumsby review group
lib-locales Schwarz Myers
lib-containers Rumsby review group
lib-iterators Rumsby review group
lib-algorithms Rumsby review group
lib-numerics Rumsby review group
lib-iostreams Schwarz Myers
gram automatic
limits unchanged
diff Plum Benito
future Schwarz Myers
extendid unchanged
The "review group" was: Austern, Becker, Clamage, Colvin, Dawes, Henricson,
Myers, Ward.
Clamage asked Corfield to perform a roll call from the attendance list.
Corfield
confirmed there were 32 voting members of X3J16 and 5 WG21 delegations
present.
1) Motion (to accept the WP) by Becker/Rumsby:
Move we accept N1037 = 96-0219 as the current WP.
Wilcox asked what we should do about typos, specifically that export is
missing
from the keyword list. Koenig said if we make changes we need to reissue the
document or we can leave the changes until we correct other problems with
the CD. Clamage said we should treat the WP as "the best we can do so far".
Motion passed X3J16: 32 yes, 0 no.
Motion passed WG21: 5 yes, 0 no.
2) Motion (to authorise convenor to submit the Committee Draft) by
Brck/Lajoie:
Move we authorise the WG21 convenor to submit the WP to SC22 for
registration as
a Committee Draft and for subsequent CD Ballot.
Motion passed X3J16: 32 yes, 0 no.
Motion passed WG21: 4 yes, 1 no.
3) Motion (to thank the host) by Corfield/Clamage:
Move we thank Plum and Plum Hall for hosting the meeting
Motion passed WG21+X3J16 by acclamation.
9.2 Review of action items, decisions made, and documents approved by the
committee
Clamage opened the committee of the whole.
There were no action items.
The committee approved N1037 = 96-0219 and decided to submit that as
the second
Committee Draft.
9.3 Issues delayed until Friday
There were no items delayed until Friday.
10. Plans for the future
10.1 Next meeting
The next meeting will be 9-14 March '97, Nashua, NH, hosted by Digital
Equipment
Corporation. Clamage noted that X3J16 will review public comments and
determine its response by the end of that meeting in order to determine its
position for the ISO ballot which closes shortly after the meeting.
Plum said that WG21 is allowed to review the NB comments but not to make
decisions at that point (because the ballot is still open). He said the
agenda is very aggressive and there will need to be a US TAG meeting during
the Nashua meeting. Welch suggested that a pre-meeting X3J16 get together
would be useful to start reviewing the public review comments.
Miller asked whether we knew if the CD would be available for the
public review
in electronic form. Plum said we had clear guidance for CD1 to distribute
electronically however there is some uncertainty as to the status of this
form of distribution. He said we don't know the answer. Clamage will follow
this up with X3. Hartinger asked whether NBs can distribute copies within
their committees. Clamage said yes. Plum noted that Rumsby's web and ftp
site is within ISO guidelines because it is password protected and the
password is restricted to members of the ISO/ANSI working groups.
10.2 Mailings
Plum said X3J16 members are covered by X3 document distribution. He
said there
are about 14 or 15 WG21 members for whom he provides distribution as
convenor. Plum noted that Ireland has joined SC22 as a P member.
Miller said that a few documents distributed at this meeting are still
missing
from his collection. He noted the deadline for the post-meeting mailing is
29 November.
Koenig asked what format the Working Paper should take in the post-meeting
mailing. Clamage said that budgetary constraints mean that the WP cannot go
in the post-Kona mailing and must go in the pre-Nashua mailing. Koenig asked
whether that WP should be 1-up, 2-up or 4-up. Glassborow suggested the
electronic copies be in all three formats. Miller noted that a 4-up copy
might not photocopy as well as 2-up. Plum said the preference expressed at
the last SC22 plenary was that large documents cease to be distributed on
paper at some point. Plum said perhaps we should not distribute a paper copy
of the WP since we already have to produce a paper copy of the CD. Lajoie
said a few committee members do not have email or 'net access. Plum said the
message from ISO appears to be that without web and ftp access, people will
find it hard to participate in standardisation. Dawes wanted clarification
that Rumsby can place the WP on the web site even when it is not part of a
mailing. Unruh asked that both the CD without editorial boxes and the WP
with editorial boxes be made available electronically. Rumsby said this
would happen.
Corfield asked Plum to clarify margins etc for A4/US Letter documents.
Plum said
authors should ensure their margins are wide enough to be printable on both
forms of paper. There was a long discussion about document formats. Brck
asked that the discussion be taken offline so we can get on with committee
business.
Lajoie asked about the procedure for handling public comments. Clamage
said we
have not decided on procedures yet.
10.3 Following meetings
The following meetings are planned:
13-18 July '97, Guildford, UK, hosted by Programming Research Ltd
9-14 November '97, somewhere near Murray Hill, NJ, hosted by AT&T
8-13 March '98, Sophia Antipolis, France, Ilog
5-10 or 12-17 July '98, Rochester, NY, Xerox
8-13 November '98, somewhere near Menlo Park, CA, Sun
Koenig said there were three alternatives for the November '97 meeting:
Morristown (or a similar small town)
New York (more interesting but more expensive)
a location somewhere in the country
Many members expressed opinons that the meeting should not be in New York.
Clamage closed the committee of the whole.
Motion by Brck/Charney:
Move we adjourn.
Motion passed WG21+X3J16: lots yes, 0 no.
The committees adjourned at 10:10 on Friday.
Appendix A - Attendance
Name Affiliation M T W Th F
Dawes, Beman Self V V V V V
Henricson, Mats Self A A A A
Myers, Nathan Self A A A A A
O'Riordan, Martin Self A A A A A
Koenig, Andrew AT&T Research V V V V V
Becker, Pete Borland V V V V V
Tooke, Simon Canada A A A A
Charney, Reg Charney & Day V V V V V
Comeau, Greg Comeau Computing A A A A A
Ward, Judy Digital Equipment Corporation V V V V V
Plauger, P.J. Dinkumware Ltd A A A A A
Brck, Dag Dynasim AB V V V V V
Andrews, Graham Edinburgh Portable Compilers V V V V
Adamczyk, Steve Edison Design Group V V V V V
Anderson, Mike Edison Design Group A A A A A
Spicer, John Edison Design Group A A A A A
Jonsson, Fredrik Ericsson V V V V V
Gibbons, Bill Hewlett Packard V V V V V
Lajoie, Josee IBM V V V V V
Colvin, Greg IMR V V V V V
Nelson, Clark Intel V V V V V
Suto, Gyuszi Intel A A A A A
Schwarz, Jerry Intrinsa V V V V V
Andersson, Per Ipso Object Software V V V V V
Stuessel, Marc IST GmbH V V
Allison, Chuck LDS Church V V V V V
Munch, Max Lex Hack & Associates A A A A A
Stanchfield, Scott Metaware Inc V V V V
Corfield, Sean Object Consultancy Services V V V V V
Benito, John Perennial V V V V V
Plum, Tom Plum Hall V V V V V
Wilcox, Thomas R. Rational Software V V V V V
Glassborow, Francis Richfords V V V V V
le Moul, Philippe Rogue Wave Software A A A
Smithey, Randy Rogue Wave Software V V V V
Saks, Dan Saks & Associates V V V V V
Wengler, Christian SET Software Consulting GmbH V V V
Hartinger, Roland Siemens Nixdorf V V V V V
Unruh, Erwin Siemens Nixdorf A A A A A
Austern, Matthew Silicon Graphics V V V V V
Miller, William M. Software Emancipation Tech V V V V V
Ball, Mike Sun Microsystems V V V V
Clamage, Steve Sun Microsystems A A A A A
Gafter, Neal Sun Microsystems A A A V
Rumsby, Steve UK A A A A A
Baisley, Donald E. Unisys V V V V V
Welch, Jim Watcom V V V V V
Total attendance 44 44 46 38 44
Total votes 31 30 32 27 32
___________________ end of document SC22 N2369 _________________________