Doc No: SC22/WG21/N1789 J16/05-0049 Date: 2005-04-11 Project: JTC1.22.32 Reply to: Robert Klarer IBM Canada, Ltd. [email protected]

Minutes of J16 Meeting No. 40/WG21 Meeting No. 34, April 11-15, 2005

1. Opening activities

Clamage called the meeting to order at 09:00(GMT+1:00) on Monday, April 11, 2005

1.1 Opening comments

Simonsen welcomed everyone to Lillehammer and described facilities for the meeting.

1.2 Introductions

Clamage had the attendees introduce themselves.

1.3 Membership, voting rights, and procedures for the meeting

Nelson reviewed membership and voting rules. Nelson then circulated the attendance list and membership list. Clamage reviewed procedures for the meeting.

1.4 Agenda review and approval

Clamage presented the agenda (document 05-0032/N1772).

Motion to approve the agenda:

Mover: Caves
Seconder: Brown
WG favor oppose abstain
J16 lots 0 0

Simonsen requested that a WG21 vote to approve the agenda be held. The request was denied, on the basis that the WG21 approved their agenda on Sunday night. Simonsen registered his disagreement with this rationale.

1.5 Distribution of position papers, WG progress reports, WG work plans for the week, and other documents that were not distributed before the meeting.

Core Working Group (CWG)

Adamczyk indicated that the CWG would be processing DRs and meeting jointly with the Evolution Group. Time devoted to the processing of DRs would be dominated by the classification of new issues and the review of proposed resolutions. Adamczyk anticipated that there would be little time for the drafting of new resolutions.

Library Working Group (LWG)

Austern reports:

There are about a dozen TR issues remaining to be resolved, and the TR will be voted out at the end of this meeting.

The LWG has about 20 new issues and about 50 open issues against the standard.

The LWG has received several proposals for library extensions. A decision must be made for each library that is eventually accepted as to whether it should be incorporated into TR2 or C++0x.

Evolution Working Group (EWG)

Stroustrup reported that the work of the EWG would begin with a discussion about the organization of the group, as per the paper submitted by Lois Goldthwaite on the behalf of the UK C++ panel (N1774). The EWG would then prepare a schedule of its activities for the week. The first item on the schedule would be a discussion of type system-related proposals.

1.6 Approval of the minutes of the previous meeting

Motion to approve the minutes (document 04-0069/N1629):

Mover: Abrahams
Seconder: Nelson

WG favor oppose abstain
J16 lots 0 0

1.7 Report on the WG21 Sunday meeting

Sutter reports:

At this meeting, 9 countries are represented. Of these 9 countries, 8 have voting status.

The drafting committee will be composed of Adamczyk, Kühl, and Brown.

WG21 has two TRs in progress, the Performance TR and the Library TR. The PDTR ballot on 18015 -- the Performance TR -- has passed, and it is now a DTR. The registration ballot and PDTR ballot for the Library TR closed last Wednesday, and the results of the ballot have not yet been received.

The next meeting, during the first full week of October 2005, will be held in Mt. Tremblant, Quebec. The WG14 meeting will be conducted at the same location during the preceding week, from Sunday, September 25 to Wednesday, September 28, and the SC22 plenary will be held -- again, at Mt. Tremblant -- Thursday, September 29 to Sunday, October 2. The original plan had been for the SC22 plenary to meet on Monday, October 3, as well, so the WG21 meeting would begin on a Monday night (the 3rd) instead of a Sunday night as usual. Since the plans for the SC22 plenary have changed, Sutter suggested that WG21 could revert to its usual practice of convening on a Sunday night (the 2nd of October), and he solicited the approval of the group to make this change. No objection to this proposed change was raised.

The Spring 2006 meeting will be held in Berlin. Possible dates are the weeks of March 19, March 26, and April 2. Final dates will be determined by the host.

The Fall 2006 meeting will be held in either Portland, OR or Boston, MA, and will be hosted by Intel. Possible dates are the week of October 15 or the week of October 29. OOPSLA falls on the week of October 22.

A quick poll revealed that, of the two locations that Intel is considering for this meeting, 17 members prefered to meet in Boston and 8 prefered Portland.

Austern is stepping down as chair of the Library Working Group, to be succeeded by Hinnant.

Motion to thank Matt Austern for his hard work in being LWG chair

Mover: Sutter
Seconder: Brown

WG favor oppose abstain
J16 lots 0 0

Sutter noted the contribution of Dawes as previous LWG chair, and thanked Dawes him and noted that it was nice that he was back. Applause.

1.8 Liaison reports

WG14 Liaison

Glassborow reports:

WG14 has agreed to change the name of the Secure C Library that is to be the subject of TR24731 to "Safer C Library." This TR specifies several new C library subroutines to prevent such programming errors as buffer overruns. The Austin Group has proposed the addition of about a dozen new function to this TR. They deal with memory allocation (for example, strdup).

Much of the rest of WG14's time was devoted to the processing of DRs. Glassborow discussed two specific DRs in some detail. One concerned effective types, and the other concerned compatible types (Glassborow characterized this as an ODR for C).

P. J. Plauger reports:

A revised C standard into which Technical Corrigenda 1 and 2 have been incorporated is to be released this year.

The TR on Decimal Types for C is to go to registration ballot after the next meeting.

There are no plans for a future revision to the C standard.

WG14 now has no open DRs.

Austern asked how the Safer C TR affects C++. Plauger replied that the Mt. Tremblant meeting will be the appropriate time to discuss the adaptation of the Safer C TR to C++.

TG5 Liaison

Sutter reported that TG5 was aiming to finish their work at their March meeting, but the group decided to spend another 6 months to complete and review the document.

SC22

P. J. Plauger related Jon Benito's statement on the dissolution of WG15 and WG20.

1.9 Editor's report and WP approval

Becker indicated that he'd like to make the table of contents smaller, and possibly to break the index into an index of member functions and a general index. Becker also suggested the possibility of splitting the standard into two or more documents.

Clamage noted that, if the standard were to be split into several documents, a danger exists that one might be accepted and another rejected.

Stroustrup supported Clamage's observation, suggesting that there might be interest in accepting a standard specifying the core language, while rejecting a library document.

Miller asked about diff-marking in the WP. Becker explained that he would look at it.

Motion to accept the working paper (document 05-00xx/N1733):

Mover: Glassborow
Seconder: Plauger

WG favor oppose abstain
J16 lots 0 1
WG21 8 0 0

Miller is maintaining the Core issues list, and he indicated that, since completion of TC1, no issues ever had DR status, because they went into WP status as soon as they were approved. Now, DRs will stay in DR status until they are reflected in an approved WP.

Motion to accept TR working draft (document 05-0005/N1745) as the working paper for TR work:

Mover: Dawes
Seconder: Dos Reis

WG favor oppose abstain
J16 lots 0 0
WG21 8 0 0

1.10 New business requiring actions by the committee

2. Organize subgroups, establish working procedures.

Ottosen observed that there is potential for overlap between the work of LWG and the work of EWG. Some problems could be solved in library or in the language. Since we don't know what the EWG will be doing, we don't know what proposals should be made to LWG. Stroustrup replied that this is a known problem, and it is known to be very hard. P. J. Plauger stated that "the pipeline is working;" we need to get experience from libraries so that we know what to do in the core language. Becker explained that the TR1 already encounters this problem with respect to result_of/decltype and some type_traits

We have three subgroups: Core, Library, and Evolution.

The committee broke into subgroups at 10:20 (GMT+1:00).

3. WG sessions (Core, Library, Performance, Evolution).

4. WG sessions continue.

5. WG sessions continue.

6. General session.

6.1 WG status and progress reports.

Core Working Group

Adamczyk presented Core Working Group (CWG) status and formal motions to be made Friday (for formal motions, see 8.1, below).

1. All issues in Ready status will be moved for integration into the Working Draft. Among these, issues 39 and 159 are of particular interest.

Issue 39 is the rework of the base class lookup ambiguity rules, years in the making. See N1626.

Issue 195 introduces "conditionally-supported" behavior, which an implementation can either not support (with a diagnostic on an attempt to use the feature) or support in the way required by the standard. See N1627.

Abrahams asked whether "conditionally-supported" behavior must be documented by the vendor.

It was clarified that behavior that is both conditionally-supported and implementation-defined will be documented. There is a class of behaviors that is conditionally-supported and is not implementation-defined. Behaviors of this class will not necessarily be documented.

P. J. Plauger asked how a programmer can test something that is "conditionally-supported" with "implementation-defined behavior?"

Miller answered that the same problem exists for regular "implementation-defined behavior," and the solution is the same as in that case.

Much discussion ensued.

Straw polls on conditionally-supported behavior:

Should implementations be required to document all conditionally-supported behavior?

strongly in favor 19
in favor 10
against 2
strongly against 0

Should a mechanism for feature tests be specified?

strongly in favor 5
in favor 5
against 8
strongly against 9

Should the CWG bring forward the motion as it stands now?

strongly in favor 12
in favor 11
against 6
strongly against 3

If the motion were modified such that it was required that all conditionally-supported behavior be documented, would you support it?

yes no
J16 13 0
WG21 8 0

2. The CWG discussed the added lookup issue for N1722, "friend T", and decided that the lookup for T in that context should be like a normal lookup for T, not like the lookup for "class T".

  class T;
  namespace N {
    class A {
      friend T;  // Refers to the previous T
      friend class T;  // Creates a new T
    };
  }

3. The CWG discussed N1757, allowing A<B>> instead of A<B> >. They liked the wording of the proposal, but recognized that the formulation chosen is easy for compilers with ad-hoc parsers but harder for those with syntax-driven parsers. The CWG is delaying action on this until the next meeting to make sure those in the latter category have a chance to evaluate the difficulty of the change.

4. The CWG discussed core issue 475, related to when uncaught_exception() becomes true during the throw process. At issue is whether it becomes true after the completion of all copies to the exception object in the runtime, or after the evaluation of the user expression but before the evaluation of any generated copy code. The CWG is looking for some guidance on this issue.

5. The CWG will be moving to approve two proposals for language extensions: long long and static_assert.

Straw poll: approve long long?
yes no
J16 lots 0
WG21 8 0

Straw poll: approve static_assert?
yes no
J16 13 1
WG21 6 2

Dos Reis reported that the French NB is concerned about small proposals being moved forward without considering interaction with other features.

Crowl argued that static_assert overlaps in purpose with concepts and Contract Programming. We should not see any of these proposals go forward ahead of the others.

Siek suggested that even with the concept proposals, we are likely to want the static_assert proposal exactly as it exists today. Even if the two proposals are related, the interaction is unlikely to cause the static_assert proposal to change.

Stroustrup indicated that the EWG wanted to move this forward because it was deemed to be sufficiently separable from the other proposals.

Library Working Group

Austern presented Library Working Group status and reviewed formal motions to be made Friday (for formal motions, see 8.1, below).

The LWG had been processing TR issues, DRs, and reviewing LWG extensions (proposals to C++0x and TR2).

The LWG conducted a discussion of its future work schedule. The following timeline was proposed:

C++0x standard won't contain much more than those TR1 libraries that we decide to introduce to the standard, and existing standard libraries, possibly revised.

Evolution Working Group

Evolution Working Group (EWG) will be making no formal motions Friday.

Stroustrup reported on EWG activities and progress:

The EWG started with a discussion of directions. This discussion was guided by a paper that Stroustrup distributed before the meeting, and another paper from the UK C++ panel.

As well, the EWG grouped the various proposal papers into related "clusters."

The EWG conducted a discussion of its future work schedule. The following timeline was proposed:

Future meetings:

See 9.1, below.

Kühl asked whether it would be possible to extend the length of the next meeting to 6 days, since the hotel facilities are currently reserved for an extra day, anyway.

Straw poll: who'd like to work an extra day at the next meeting? In favor: lots.

Sutter will check to see whether such an arrangement is possible

6.2 Presentation and discussion of DRs ready to be voted on. Straw votes taken.

see 6.1

7. WG sessions continue

8. Review of the meeting

8.1 Formal motions, including DRs to be resolved.

Core Working Group motions

1. Move to advance the following core working group issues to DR status, and apply them to the Working Draft:
39, 195, 306, 320, 437, 439, 441, 443, 457, and 460.
(This is the list of issues in Ready status in J16/05-0027 = WG21/N1767.)

Mover: Adamczyk
Seconder: Nelson
WG favor oppose abstain
J16 14 0 0
WG21 8 0 0

2. Move to advance the core working group issue 195 ("conditionally-supported behavior") to DR status, and apply it to the Working Draft:

[Adamczyk noted that documentation is required if the conditionally-supported behavior is not supported.]

Mover: Adamczyk
Seconder: Merrill
WG favor oppose abstain
J16 14 0 0
WG21 8 0 0

3. Adopt J16/04-0160 = WG21/N1720, "Proposal to Add Static Assertions to the Core Language (Revision 3)" and update the Working Draft accordingly.

Mover: Adamczyk
Seconder: Hinnant
WG favor oppose abstain
J16 13 1 0
WG21 6 1 1

Library Working Group motions

1. Move to advance the following library working group issues to DR status, and apply them to the working paper: 130 386 406 409 413 434 438 444 445 453 455 457 460 469. (This is all issues in "ready" status except for 454.)

Mover: Austern
Seconder: Dawes
WG favor oppose abstain
J16 14 0 0
WG21 8 0 0

2. Move to amend the library extensions technical report, N1745 (4.6, paragraph 1), by removing "a void" from the first bullet item, removing "void" from the second bullet item, and adding the following text:

except that


Mover: Austern
Seconder: Hinnant
WG favor oppose abstain
J16 14 0 0
WG21 8 0 0

3. Move to amend the library extensions technical report, N1745, as specified by the proposed resolution to issue 4.39 from the TR issues list (N1765).

Mover: Austern
Seconder: Hinnant
WG favor oppose abstain
J16 15 0 0
WG21 8 0 0

4. Move to amend the library extensions technical report, N1745 (5.1.1 [tr.rand.req]/2), by changing

g is an lvalue of a zero-argument function object returning values of unsigned integral type,

to

g is an lvalue of a type other than X that defines a zero-argument function object returning values of unsigned integral type,
Mover: Austern
Seconder: Dos Reis
WG favor oppose abstain
J16 15 0 0
WG21 8 0 0

5. Move to amend the library extensions technical report, N1745, by replacing 5.1.4.2/8-9 with:

void seed()
Effects: Invokes seed(5489UL).

void seed(unsigned long v)
Effects: Sets x(-n) to v mod 2w. Then, iteratively,
sets x(-n+i) to (i + 1812433253 * (x(-n+i-1) xor (x(-n+i-1) rshift w-2))) mod 2w for i = 1 .. n-1.

Replace 5.1.5 paragraph 2 with:

For a default-constructed mt19937 object, x(10000) = 4123659995
Mover: Austern
Seconder: Brown
WG favor oppose abstain
J16 15 0 0
WG21 8 0 0

6. Move to amend the library extensions technical report, N1745, by removing 6.1.4 [tr.tuple.pairs]/1, and replacing it with:

These templates are extensions to the standard library class template std::pair.

tuple_size<pair<T1, T2> >::value
Return type: integral constant expression.
Value: 2.

struct tuple_element<0, pair<T1, T2> >::type
Value: the type T1.

struct tuple_element<1, pair<T1, T2> >::type
Value: the type T2.

template<int I, class T1, class T2>
P& get(pair<T1, T2>&);
template<int I, class T1, class T2>
const P& get(const pair<T1, T2>&);

Return type: If I is 0 then P is T1, if I is 1 then P is T2, otherwise the program is ill-formed.
Returns: If I == 0 returns p.first, otherwise returns p.second.

Mover: Austern
Seconder: Dawes
WG favor oppose abstain
J16 15 0 0
WG21 8 0 0

7. Move to amend clause 6.3 of the library extensions technical report, N1745, as follows.

In table 23 of section 6.3.1, replace the rows for a.insert(r, t), a.erase(r), and a.erase(r1,r2) to read:

a.insert(q,t) iterator Equivalent to a.insert(t). Return value is an iterator pointing to the element with the key equivalent to that of t. The iterator q is a hint pointing to where the search should start. Implementations are permitted to ignore the hint. Average case O(1), worst case O(a.size())
a.insert(r,t) const_iterator Equivalent to a.insert(t). Return value is an iterator pointing to the element with the key equivalent to that of t. The iterator r is a hint pointing to where the search should start. Implementations are permitted to ignore the hint. Average case O(1), worst case O(a.size())
a.erase(q) iterator Erases the element pointed to by q. Return value is the iterator immediately following q prior to the erasure. Average case O(1), worst case O(a.size())
a.erase(r) const_iterator Erases the element pointed to by r. Return value is the iterator immediately following r prior to the erasure. Average case O(1), worst case O(a.size())
a.erase(q1, q2) iterator Erases all elements in the range [q1,q2). Return value is the iterator immediately following the erased elements prior to the erasure. Average case O(N), where N is distance(q1,q2), worst case O(a.size()).
a.erase(r1, r2) const_iterator Erases all elements in the range [r1,r2). Return value is the iterator immediately following the erased elements prior to the erasure. Average case O(N), where N is distance(r1,r2), worst case O(a.size()).

In section 6.3.4, make the corresponding changes to the erase signatures of unordered_set, unordered_map, unordered_multiset, and unordered_multimap.

Mover: Austern
Seconder: Hinnant
WG favor oppose abstain
J16 14 0 1
WG21 7 0 1

8. Move to appoint an editorial committee consisting of Matt Austern and Pete Becker to apply the changes to the library extension TR and appoint a review committee consisting of Pete Becker, Walter Brown, Marc Paterno, P. J. Plauger, Dos Reis, and Klarer to approve the changes, and empower the convener to forward the document for ISO DTR ballot.

Mover: Austern
Seconder: Brown
WG favor oppose abstain
J16 15 0 0
WG21 8 0 0

Evolution Working Group motions

None.

8.2 Review of action items, decisions made, and documents approved by the committee

None.

8.3 Issues delayed until Friday

Becker reported that the Wiki will be up between meetings, and requested volunteers to proof-read the WP.

Goldthwaite, on behalf of the UK C++ panel thanked the Wiki maintainers and Dinkumware, especially Chris Walker, for making it possible to follow proceedings from a remote location. Applause.

Austern moved to thank the host. Applause.

Brown thanked Austern for his work as LWG chair. Applause.

9. Plans for the future

9.1 Next meeting

The next meeting will be held October 3-7, 2005 in Mont Tremblant, QC, Canada. Sutter will look into starting on October 2, instead.

9.2 Mailings

Nelson reported the following mailing deadlines:

post-meeting mailing April 29 2005
midterm mailing June 24 2005
pre-meeting mailing August 26 2005

Crowl emphasized the seriousness of issues relating to binary compatibility. Abrahams asked whether we should have a policy on this. Sutter replied that somebody has to write a paper before the group can discuss these issues, and encouraged the members of the group to volunteer to write such a paper.

Austern stated that he is not convinced that this is something that this committee can discuss. There is no concensus as to what binary compatibility means in general. Also, it may be difficult to specify binary compatiblility without specifying implementation details.

9.3 Following meetings

covered on Monday.

Motion to adjourn

Mover: Dawes
Seconder: Hedquist

WG favor oppose abstain
J16 15 0 0

Applause.

Meeting adjourned at 09:24(GMT+1:00)

Attendance

Company/Organization Representative Mon Tue Wed Thu Fri
Abrahams David Abrahams V V V V V
AT&T Bjarne Stroustrup V V V V V
Dawes Beman G. Dawes V V V V V
Dinkumware P. J. Plauger V V V V
Dinkumware Pete Becker A A A A V
Dinkumware Tana Plauger A A A A
Dinkumware Christopher Walker A
Edison Design Group J. Stephen Adamczyk V V V V V
Edison Design Group Daveed Vandevoorde A A A A A
Edison Design Group John H. Spicer A A A A A
Edison Design Group William M. Miller A A A A A
Fermi Nat. Accelerator Lab Walter E. Brown V V V V V
Fermi Nat. Accelerator Lab Marc F. Paterno A A A A
Gimpel Software James Widman A A A A
Google Matthew Austern A A A A A
IBM Robert Klarer V V V V V
IBM Michael Wong A A A A A
Indiana University Jeremy Siek V V V V
Indiana University Doug Gregor A A A A V
Intel Clark Nelson V V V V V
Metrowerks Howard E. Hinnant V V V V V
Metrowerks Andreas Hommel A A A A A
Microsoft Jonathan Caves V V V V V
Microsoft Herb Sutter A A A A A
Perennial Barry Hedquist V V V V V
Plum Hall Francis Glassborow V V V V V
Programming Research Richard Corden V V V V
Red Hat Jason Merrill V V V V V
Sun Microsystems Lawrence Crowl V V V V V
Sun Microsystems Stephen D. Clamage A A A A A
Zephyr Associates Thomas Witt V V V V V
Contendix Dietmar Kühl N N N N N
INRIA Sylvain Pion N N N N N
Integrable Solutions Gabriel Dos Reis N N N N N
IS Teledata Jens Maurer N N N N N
LM Ericsson Finland Attila Feher N N N N N
Norwegian Unix Users Group Idar Tollefsen N N N N N
Novell/SUSE Paolo Carlini N N N N N
RAP Keld Simonsen N N N N N
Texas A&M Jaako Järvi N N N N
Toshiba Seiji Hayashida N N N N N
Vollman Engineering Detlef Vollman N N N N N
Lois Goldthwaite N N N N N
Thorsten Ottosen N N N N N
Stig Sandnes N N N N N
Terje Slettebø N N
Broneck Kozicki N N N N