| Doc. no. | Dxxxx=xx-xxxx |
| Date: | 2008-07-01 |
| Project: | Programming Language C++ |
| Reply to: | Douglas Gregor <doug.gregor@gmail.com> |
Also see:
The purpose of this document is to record the status of issues which have been related to the authors of the C++ concepts proposals. Issues represent potential defects in the language or library proposals for concepts.
This document contains only issues which are actively being considered for concepts. That is, issues which have a status of New, Open, Ready, and Review. See Concepts Defect Report List for issues considered defects and Concepts Closed Issues List for issues considered closed.
New - The issue has not yet been reviewed. Any Proposed Resolution is purely a suggestion from the issue submitter, and should not be construed as the view of the committee.
Open - The committee has discussed the issue but is not yet ready to move the issue forward. There are several possible reasons for open status:
A Proposed Resolution for an open issue is still not be construed as the view of committee. Comments on the current state of discussions are often given at the end of open issues in an italic font. Such comments are for information only and should not be given undue importance.
Dup - The committee has reached consensus that the issue is a duplicate of another issue, and will not be further dealt with. A Rationale identifies the duplicated issue's issue number.
NAD - The committee has reached consensus that the issue is not a defect in the concepts proposal.
NAD Editorial - The committee has reached consensus that the issue can either be handled editorially, or is handled by a paper (usually linked to in the rationale).
NAD Future - In addition to the regular status, the committee believes that this issue should be revisited at the next revision of the standard.
Review - Exact wording of a Proposed Resolution is now available for review on an issue for which the committee previously reached informal consensus.
Ready - The committee has reached consensus that the issue is a defect in the concepts proposal, the Proposed Resolution is correct, and the issue is ready to be integrated into the next concepts proposal.
WP - (Concepts Defect) - The committee has decided to accept the proposed resolution and the resolution is part of a concepts proposal draft.
Pending - This is a status qualifier. When prepended to a status this indicates the issue has been processed by the committee, and a decision has been made to move the issue to the associated unqualified status. However for logistical reasons the indicated outcome of the issue has not yet appeared in the latest working paper.
Issues are always given the status of New when they first appear on the issues list. They may progress to Open or Review while the committee is actively working on them. When the committee has reached consensus on the disposition of an issue, the status will then change to Dup, NAD, or Ready as appropriate. Once a Ready issue has made it into a draft of the concepts proposal, it is given the status of Working Paper ( WP). To streamline the process for concepts (since it is still a proposal, not part of the committee working paper), we will often skip the Review or Ready status.
Section: 24.1.1 [input.iterators] Status: New Submitter: LWG Date: 2008-02-28
View all other issues in [input.iterators].
View all issues with New status.
Discussion:
InputIterator currently requires that its difference type be both an IntegerType and SignedIntegralLike. There are two issues here. First, why do we need to require both? Answer: one of those is a compiler-generated concept saying that it must be one of a specific list of built-in types, but it doesn't declare anything about the operations, so it doesn't allow you to actually write things like +. But that's very weird. If we know that we've constrained it to be one of a small number of types, shouldn't we be able to use those operations that those types all have in common? Second, just why are we requiring it to be one of the types in that list? If I have my own type that I can use for counting (i.e. an abelian group), then why can't I use it for the iterator's difference type?
Section: 20.1.1 [concept.support] Status: New Submitter: Alisdair Meredith Date: 2008-03-25
View other active issues in [concept.support].
View all other issues in [concept.support].
View all issues with New status.
Discussion:
There is no core concept for Polymorphic types in n2572. This
seems to be a useful concept where we
expect dynamic_cast to return something useful.
Proposed resolution:
Add to the synopsis of the header <concepts>:
concept ClassType<typename T> see below; concept Class<typename T> see below; concept PolymorphicClass<typename T> see below; concept Union<typename T> see below;
Add the following to [concept.support], after the description of
concept Class:
concept PolymorphicClass<typename T> : Class<T> { }
T that is a polymorphic class, a concept map PolymorphicClass<T> shall be implicitly defined in namespace std.VariableTypesSection: 20.1.1 [concept.support] Status: New Submitter: Thomas Witt Date: 2008-03-25
View other active issues in [concept.support].
View all other issues in [concept.support].
View all issues with New status.
Discussion:
Since one cannot create an instance of an abstract class, an
abstract class type T should not have an
implicitly-defined concept
map VariableType<T>.
Proposed resolution:
Modify [concept.support]p9 as follows:
T that is an
object type or reference type, but not an abstract class
type ([class.abstract]), a concept
map VariableType<T> shall be implicitly
defined in namespace std.RegularSection: 20.1.7 [concept.regular] Status: New Submitter: Chris Jefferson Date: 2008-05-30
View all other issues in [concept.regular].
View all issues with New status.
Discussion:
I've been thinking about rearranging these things:
Regular/SemiRegular.Swappable into Regular/SemiRegular.The reason for 2 is I expect for many people (it has been for me)
Regular will be their standard concept to use for
"types which are normal / sensible". The fact you can't sort
a Regular type (as it isn't Swappable)
seems a bit bizarre.
Section: 23 [containers] Status: Open Submitter: Pablo Halpern Date: 2008-05-29
View all other issues in [containers].
Discussion:
The requirements for extended move construction are correct table 91, but missing in the requires clauses in N2623. The requirements on the normal move constructor and the move assignment operator are missing.
MoveConstructible constructor should be explicitSection: 20.1.5 [concept.copymove] Status: New Submitter: LWG Date: 2008-06-09
View all other issues in [concept.copymove].
View all issues with New status.
Discussion:
Users are permitted to use types with explicit copy and move
constructors with the C++98 standard library. To support this use
case with concepts, the constructor requirements
in MoveConstructible and CopyConstructible
need to be explicit.
Proposed resolution:
Modify [concept.copymove] paragraphs 1-3 as follows:
auto concept MoveConstructible<typename T>: HasConstructor<T, T&&>{ explicit T::T(T&&); }
T::T(T&& rv);// note: inherited from HasConstructor<T, T&&>
T object is equivalent to the value of rv before the construction. [ Note: there is no
requirement on the value of rv after the construction. - end note ]auto concept CopyConstructible<typename T> : MoveConstructible<T>, HasConstructor<T, const T&> { T::T(const T&); axiom CopyPreservation(T x) { T(x) == x; } }