*: Regenerate.
[gcc.git] / libstdc++-v3 / doc / html / manual / ext_compile_checks.html
1 <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Chapter 16. Compile Time Checks</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"><meta name="keywords" content="
2 ISO C++
3 ,
4 library
5 "><meta name="keywords" content="
6 ISO C++
7 ,
8 runtime
9 ,
10 library
11 "><link rel="home" href="../index.html" title="The GNU C++ Library"><link rel="up" href="extensions.html" title="Part III.  Extensions"><link rel="prev" href="bk01pt03pr01.html" title=""><link rel="next" href="debug_mode.html" title="Chapter 17. Debug Mode"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><th width="60%" align="center">Part III. 
12 Extensions
13
14 </th><td width="20%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 16. Compile Time Checks"><div class="titlepage"><div><div><h2 class="title"><a name="manual.ext.compile_checks"></a>Chapter 16. Compile Time Checks</h2></div></div></div><p>
15 Also known as concept checking.
16 </p><p>In 1999, SGI added <span class="emphasis"><em>concept checkers</em></span> to their implementation
17 of the STL: code which checked the template parameters of
18 instantiated pieces of the STL, in order to insure that the parameters
19 being used met the requirements of the standard. For example,
20 the Standard requires that types passed as template parameters to
21 <code class="code">vector</code> be <span class="quote"><span class="quote">Assignable</span></span> (which means what you think
22 it means). The checking was done during compilation, and none of
23 the code was executed at runtime.
24 </p><p>Unfortunately, the size of the compiler files grew significantly
25 as a result. The checking code itself was cumbersome. And bugs
26 were found in it on more than one occasion.
27 </p><p>The primary author of the checking code, Jeremy Siek, had already
28 started work on a replacement implementation. The new code has been
29 formally reviewed and accepted into
30 <a class="link" href="http://www.boost.org/libs/concept_check/concept_check.htm" target="_top">the
31 Boost libraries</a>, and we are pleased to incorporate it into the
32 GNU C++ library.
33 </p><p>The new version imposes a much smaller space overhead on the generated
34 object file. The checks are also cleaner and easier to read and
35 understand.
36 </p><p>They are off by default for all versions of GCC from 3.0 to 3.4 (the
37 latest release at the time of writing).
38 They can be enabled at configure time with
39 <a class="link" href="configure.html" title="Configure"><code class="literal">--enable-concept-checks</code></a>.
40 You can enable them on a per-translation-unit basis with
41 <code class="code">#define _GLIBCXX_CONCEPT_CHECKS</code> for GCC 3.4 and higher
42 (or with <code class="code">#define _GLIBCPP_CONCEPT_CHECKS</code> for versions
43 3.1, 3.2 and 3.3).
44 </p><p>Please note that the upcoming C++ standard has first-class
45 support for template parameter constraints based on concepts in the core
46 language. This will obviate the need for the library-simulated concept
47 checking described above.
48 </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 17. Debug Mode</td></tr></table></div></body></html>