|
ConceptGCC is available as source code and in binary form for
selected platforms. The latest version of ConceptGCC is still an
alpha, and as such it does not implement the complete ConceptC++
language and still contains many bugs.
Latest Development Version
ConceptGCC is constantly under development. The latest development version of
ConceptGCC is always available via our public Subversion repository
at https://svn.osl.iu.edu/svn/hlo/trunk/gcc/. To
retrieve the latest version of ConceptGCC, you will need a copy of
the Subversion client,
version 1.1 or newer. To check out a copy of ConceptGCC, use:
svn co https://svn.osl.iu.edu/svn/hlo/trunk/gcc conceptgcc
August 7, 2008 -- ConceptGCC 4.3.0 Alpha 7
Binaries
Source Code
Changes
Alpha 7 fixes a number of bugs in alpha 6 and brings ConceptGCC closer to the latest concepts proposals. Some specific changes:
- Improved interaction between concepts and rvalue references.
- Elimination of concept map forwarding functions through the implementation of "associated function candidate sets."
- Added support for late-checked blocks.
- Syntactic updates to match the latest concepts proposals.
- Overhaul of the iterator concepts, providing improved support for proxy iterators and rvalue references.
- Move semantics are now available in some of the standard library algorithms.
May 10, 2007 -- ConceptGCC BoostCon Edition
BoostCon is next week, and I've prepared a special "BoostCon Edition" of ConceptGCC to be used in some of the hands-on C++0x sessions, including a half-day session on concepts.
Binaries
Source Code
Changes
The BoostCon Edition of ConceptGCC fixes a few minor bugs and includes some small tweaks, including:
- The range-based for loop now deals with temporary containers appropriately.
- Rvalue-reference arguments in associated functions now forward as an rvalue.
- The iterator concepts have been simplified and expanded in scope, providing better support for proxies;
vector<bool>::iterator is again a RandomAccessIterator.
- Added
Semiregular and Regular concepts.
- Added support for delegating constructors (for real this time).
- Added the
DerivedFrom concept.
April 11, 2007 -- ConceptGCC 4.3.0 alpha 6
Binaries
Source Code
Changes
Alpha 6 fixes a number of bugs in alpha 5 and adds many new
features. In particular:
- ConceptGCC now supports (and requires) the syntax described by
the latest concepts
proposal, N2193. There
were two changes to the syntax that will effect almost all uses of ConceptGCC:
- The keyword where has been changed
to requires. Thus, a "where clause" is now referred to
as a "requirements clause" or a "requires clause".
- When multiple concept constraints are contained in a
requirements clause, they should be separated with a comma
(
,) rather than two ampersands
(&&).
ConceptGCC will still accept the old syntax for a few versions,
with a warning.
- ConceptGCC is now based on a development version
of GCC 4.3. Along with
the improved
functionality of GCC 4.3, ConceptGCC now implements many C++0x
features in addition to concepts:
While individual features have been tested reasonably well, we
have not performed much testing when combining these various
features together. For example, variadic templates are known not
to work well with concepts in the compiler.
- The For concept and its header <for> have been removed. Instead, the range-based for loop uses the Range concept from the <iterator> header, as in the latest range-based for loop proposal, N2196.
January 18, 2007 -- ConceptGCC 4.1.1 alpha 5
Binaries
Source Code
Changes
Alpha 5 fixes a number of bugs in alpha 4 and adds some new
features. In particular:
Older Versions
October 12, 2006 -- ConceptGCC 4.1.1 alpha 4
Binaries
Source Code
Changes
Alpha 4 fixes a number of bugs in alpha 3 and adds some new
features. In particular:
- Where clauses can be used to constrain class templates.
- Where clauses can be used to constrain non-template members of
class templates, e.g.,
template<CopyConstructible T>
class list {
public:
where LessThanComparable<T> void sort();
};
- Nested name lookup for associated types within template type
parameters is now uniform across inline requirements (in the
template header) and requirements expressed in the where close, so
the following two declarations are equivalent for name lookup:
template<InputIterator Iter>
where Addable<Iter::value_type>
Iter::value_type sum(Iter first, Iter last);
template<typename Iter>
where InputIterator<Iter> && Addable<Iter::value_type>
Iter::value_type sum(Iter first, Iter last);
To get the old behavior, supply -finline-associated-types on the command line.
- typename can now be used to access associated types
without producing a warning.
- The late_check keyword is now supported in a very
limited context: you can use it before the where of a where
clause to create a template that has concept requirements (e.g.,
can't be instantiated unless all of the requirements are satisfied),
but the definition of this template is parsed like an unconstrained
template. For instance:
template<InputIterator InIter, OutputIterator OutIter>
late_check where Assignable<OutIter::reference, InIter::reference>
OutIter copy(InIter first, InIter last, OutIter out) {
// Not type-checked a compile time!
while (first != last)
*out++ = *first++;
return out;
}
Late-checked where clauses can be used when you want to provide
improved error messages using concepts, but for some reason have
not been able to make the template's definition type-check
completely. This behavior supercedes the use of the !
syntax to mark dependent template parameters in constrained
templates.
June 9, 2006 -- ConceptGCC 4.1.1 alpha 3
Binaries
Source Code
ConceptGCC 4.0.1 -- Indiana Concepts 2
License
ConceptGCC is distributed under the GNU General Public
License version 2 for the compiler bits, including the "special
exception" for the C++ standard library bits. It is Copyright ©
The Trustees of Indiana University (IURTC), which appends the
following disclaimer to the GPL:
IURTC PROVIDES THE INTELLECTUAL PROPERTY "AS IS" AND MAKES NO
REPRESENTATIONS AND EXTENDS NO WARRANTIES OF ANY KIND, EITHER EXPRESS
OR IMPLIED. THERE ARE NO EXPRESS OR IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS OF THE INTELLECTUAL PROPERTY OR LICENSED
PRODUCTS DERIVED FROM OR INCLUDING IT FOR A PARTICULAR PURPOSE, OR
THAT THE USE OF THE INTELLECTUAL PROPERTY OR ANY LICENSED PRODUCT WILL
NOT INFRINGE ANY PATENT, COPYRIGHT, TRADEMARK OR OTHER RIGHTS, OR ANY
OTHER EXPRESS OR IMPLIED WARRANTIES. IURTC MAKES NO REPRESENTATION OR
WARRANTY WITH RESPECT TO THE PERFORMANCE OF THE INTELLECTUAL PROPERTY
OR ANY LICENSED PRODUCT, INCLUDING THEIR SAFETY, EFFECTIVENESS, OR
COMMERCIAL VIABILITY. IURTC WILL NOT BE LIABLE TO [LICENSEE], OR ITS
SUCCESSORS, ASSIGNS, CONTRACTORS, OR SUBLICENSEES, OR ANY THIRD PARTY
REGARDING ANY CLAIM ARISING FROM OR RELATING TO [LICENSEE]'S USE OF
THE INTELLECTUAL PROPERTY, ANY LICENSED PRODUCT, OR FROM THE
MANUFACTURE, USE, IMPORTATION OR SALE OF LICENSED PRODUCTS, OR FOR ANY
CLAIM FOR LOSS OF PROFITS, LOSS OR INTERRUPTION OF BUSINESS, OR FOR
INDIRECT, SPECIAL, EXEMPLARY, PUNITIVE, OR CONSEQUENTIAL DAMAGES OF
ANY KIND.
|