ConceptGCC Download

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

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:

  • ConceptGCC now supports the range-based for loop as described in N2049. For example, one can write the following simple loop to sum the values in a vector:
    vector<int> v; // initialize values in v
    int sum = 0;
    for (int i : v)
      sum = sum + i;
      
  • The late_check keyword now precedes the template keyword, to declare a late-checked template.
  • Improvements in the handling of associated types.
  • Improvements in type-checking of constrained class templates.

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.