# C++ TR1

ISO C++ tr1

This table is based on the table of contents of ISO/IEC DTR 19768 Doc No: N1836=05-0096 Date: 2005-06-24 Draft Technical Report on C++ Library Extensions

In this implementation the header names are prefixed by `tr1/`, for instance `<tr1/functional>`, `<tr1/memory>`, and so on.

This page describes the TR1 support in mainline GCC SVN, not in any particular release.

C++ TR1 Implementation Status

Section | Description | Status | Comments
--- | --- | --- | ---
2 | General Utilities
2.1 | Reference wrappers |  |
2.1.1 | Additions to header `<functional>` synopsis | Y |
2.1.2 | Class template `reference_wrapper` |  |
2.1.2.1 | `reference_wrapper` construct/copy/destroy | Y |
2.1.2.2 | `reference_wrapper` assignment | Y |
2.1.2.3 | `reference_wrapper` access | Y |
2.1.2.4 | `reference_wrapper` invocation | Y |
2.1.2.5 | `reference_wrapper` helper functions | Y |
2.2 | Smart pointers |  |
2.2.1 | Additions to header `<memory>` synopsis | Y |
2.2.2 | Class `bad_weak_ptr` | Y |
2.2.3 | Class template `shared_ptr` |  | Uses code from boost::shared_ptr.
2.2.3.1 | `shared_ptr` constructors | Y |
2.2.3.2 | `shared_ptr` destructor | Y |
2.2.3.3 | `shared_ptr` assignment | Y |
2.2.3.4 | `shared_ptr` modifiers | Y |
2.2.3.5 | `shared_ptr` observers | Y |
2.2.3.6 | `shared_ptr` comparison | Y |
2.2.3.7 | `shared_ptr` I/O | Y |
2.2.3.8 | `shared_ptr` specialized algorithms | Y |
2.2.3.9 | `shared_ptr` casts | Y |
2.2.3.10 | `get_deleter` | Y |
2.2.4 | Class template `weak_ptr` |  |
2.2.4.1 | `weak_ptr` constructors | Y |
2.2.4.2 | `weak_ptr` destructor | Y |
2.2.4.3 | `weak_ptr` assignment | Y |
2.2.4.4 | `weak_ptr` modifiers | Y |
2.2.4.5 | `weak_ptr` observers | Y |
2.2.4.6 | `weak_ptr` comparison | Y |
2.2.4.7 | `weak_ptr` specialized algorithms | Y |
2.2.5 | Class template `enable_shared_from_this` | Y |
3 | Function Objects
3.1 | Definitions | Y |
3.2 | Additions to `<functional> synopsis` | Y |
3.3 | Requirements | Y |
3.4 | Function return types | Y |
3.5 | Function template `mem_fn` | Y |
3.6 | Function object binders |  |
3.6.1 | Class template `is_bind_expression` | Y |
3.6.2 | Class template `is_placeholder` | Y |
3.6.3 | Function template `bind` | Y |
3.6.4 | Placeholders | Y |
3.7 | Polymorphic function wrappers |  |
3.7.1 | Class `bad_function_call` | Y |
3.7.1.1 | `bad_function_call` constructor | Y |
3.7.2 | Class template `function` |  |
3.7.2.1 | `function` construct/copy/destroy | Y |
3.7.2.2 | `function` modifiers | Y |
3.7.2.3 | `function` capacity | Y |
3.7.2.4 | `function` invocation | Y |
3.7.2.5 | `function` target access | Y |
3.7.2.6 | undefined operators | Y |
3.7.2.7 | null pointer comparison operators | Y |
3.7.2.8 | specialized algorithms | Y |
4 | Metaprogramming and type traits
4.1 | Requirements | Y |
4.2 | Header `<type_traits>` synopsis | Y |
4.3 | Helper classes | Y |
4.4 | General Requirements | Y |
4.5 | Unary Type Traits |  |
4.5.1 | Primary Type Categories | Y |
4.5.2 | Composite type traits | Y |
4.5.3 | Type properties | Y |
4.6 | Relationships between types | Y |
4.7 | Transformations between types |  |
4.7.1 | Const-volatile modifications | Y |
4.7.2 | Reference modifications | Y |
4.7.3 | Array modifications | Y |
4.7.4 | Pointer modifications | Y |
4.8 | Other transformations | Y |
4.9 | Implementation requirements | Y |
5 | Numerical Facilities
5.1 | Random number generation |  |
5.1.1 | Requirements | Y |
5.1.2 | Header `<random>` synopsis | Y |
5.1.3 | Class template `variate_generator` | Y |
5.1.4 | Random number engine class templates | Y |
5.1.4.1 | Class template `linear_congruential` | Y |
5.1.4.2 | Class template `mersenne_twister` | Y |
5.1.4.3 | Class template `subtract_with_carry` | Y |
5.1.4.4 | Class template `subtract_with_carry_01` | Y |
5.1.4.5 | Class template `discard_block` | Y |
5.1.4.6 | Class template `xor_combine` | Y | operator()() per N2079
5.1.5 | Engines with predefined parameters | Y |
5.1.6 | Class `random_device` | Y |
5.1.7 | Random distribution class templates | Y |
5.1.7.1 | Class template `uniform_int` | Y |
5.1.7.2 | Class `bernoulli_distribution` | Y |
5.1.7.3 | Class template `geometric_distribution` | Y |
5.1.7.4 | Class template `poisson_distribution` | Y |
5.1.7.5 | Class template `binomial_distribution` | Y |
5.1.7.6 | Class template `uniform_real` | Y |
5.1.7.7 | Class template `exponential_distribution` | Y |
5.1.7.8 | Class template `normal_distribution` | Y |
5.1.7.9 | Class template `gamma_distribution` | Y |
5.2 | Mathematical special functions | Y |
5.2.1 | Additions to header `<cmath>` synopsis | Y |
5.2.1.1 | associated Laguerre polynomials | Y |
5.2.1.2 | associated Legendre functions | Y |
5.2.1.3 | beta function | Y |
5.2.1.4 | (complete) elliptic integral of the first kind | Y |
5.2.1.5 | (complete) elliptic integral of the second kind | Y |
5.2.1.6 | (complete) elliptic integral of the third kind | Y |
5.2.1.7 | confluent hypergeometric functions | Y |
5.2.1.8 | regular modified cylindrical Bessel functions | Y |
5.2.1.9 | cylindrical Bessel functions (of the first kind) | Y |
5.2.1.10 | irregular modified cylindrical Bessel functions | Y |
5.2.1.11 | cylindrical Neumann functions | Y |
5.2.1.12 | (incomplete) elliptic integral of the first kind | Y |
5.2.1.13 | (incomplete) elliptic integral of the second kind | Y |
5.2.1.14 | (incomplete) elliptic integral of the third kind | Y |
5.2.1.15 | exponential integral | Y |
5.2.1.16 | Hermite polynomials | Y |
5.2.1.17 | hypergeometric functions | Y |
5.2.1.18 | Laguerre polynomials | Y |
5.2.1.19 | Legendre polynomials | Y |
5.2.1.20 | Riemann zeta function | Y |
5.2.1.21 | spherical Bessel functions (of the first kind) | Y |
5.2.1.22 | spherical associated Legendre functions | Y |
5.2.1.23 | spherical Neumann functions | Y |
5.2.2 | Additions to header `<math.h>` synopsis | Y |
6 | Containers
6.1 | Tuple types | Y |
6.1.1 | Header `<tuple>` synopsis | Y |
6.1.2 | Additions to header `<utility>` synopsis | Y |
6.1.3 | Class template `tuple` | Y |
6.1.3.1 | Construction | Y |
6.1.3.2 | Tuple creation functions | Y |
6.1.3.3 | Tuple helper classes | Y |
6.1.3.4 | Element access | Y |
6.1.3.5 | Relational operators | Y |
6.1.4 | Pairs | Y |
6.2 | Fixed size array | Y |
6.2.1 | Header `<array>` synopsis | Y |
6.2.2 | Class template `array` | Y |
6.2.2.1 | `array` constructors, copy, and assignment | Y |
6.2.2.2 | `array` specialized algorithms | Y |
6.2.2.3 | `array` size | Y |
6.2.2.4 | Zero sized `array`s | Y |
6.2.2.5 | Tuple interface to class template `array` | Y |
6.3 | Unordered associative containers | Y |
6.3.1 | Unordered associative container requirements | Y |
6.3.1.1 | Exception safety guarantees | Y |
6.3.2 | Additions to header `<functional>` synopsis | Y |
6.3.3 | Class template `hash` | Y |
6.3.4 | Unordered associative container classes | Y |
6.3.4.1 | Header `<unordered_set>` synopsis | Y |
6.3.4.2 | Header `<unordered_map>` synopsis | Y |
6.3.4.3 | Class template `unordered_set` | Y |
6.3.4.3.1 | `unordered_set` constructors | Y |
6.3.4.3.2 | `unordered_set` swap | Y |
6.3.4.4 | Class template `unordered_map` | Y |
6.3.4.4.1 | `unordered_map` constructors | Y |
6.3.4.4.2 | `unordered_map` element access | Y |
6.3.4.4.3 | `unordered_map` swap | Y |
6.3.4.5 | Class template `unordered_multiset` | Y |
6.3.4.5.1 | `unordered_multiset` constructors | Y |
6.3.4.5.2 | `unordered_multiset` swap | Y |
6.3.4.6 | Class template `unordered_multimap` | Y |
6.3.4.6.1 | `unordered_multimap` constructors | Y |
6.3.4.6.2 | `unordered_multimap` swap | Y |
7 | Regular Expressions
7.1 | Definitions | N |
7.2 | Requirements | N |
7.3 | Regular expressions summary | N |
7.4 | Header `<regex>` synopsis | N |
7.5 | Namespace `tr1::regex_constants` | N |
7.5.1 | Bitmask Type `syntax_option_type` | N |
7.5.2 | Bitmask Type `regex_constants::match_flag_type` | N |
7.5.3 | Implementation defined `error_type` | N |
7.6 | Class `regex_error` | N |
7.7 | Class template `regex_traits` | N |
7.8 | Class template `basic_regex` | N |
7.8.1 | `basic_regex` constants | N |
7.8.2 | `basic_regex` constructors | N |
7.8.3 | `basic_regex` assign | N |
7.8.4 | `basic_regex` constant operations | N |
7.8.5 | `basic_regex` locale | N |
7.8.6 | `basic_regex` swap | N |
7.8.7 | `basic_regex` non-member functions | N |
7.8.7.1 | `basic_regex` non-member swap | N |
7.9 | Class template `sub_match` | N |
7.9.1 | `sub_match` members | N |
7.9.2 | `sub_match` non-member operators | N |
7.10 | Class template `match_results` | N |
7.10.1 | `match_results` constructors | N |
7.10.2 | `match_results` size | N |
7.10.3 | `match_results` element access | N |
7.10.4 | `match_results` formatting | N |
7.10.5 | `match_results` allocator | N |
7.10.6 | `match_results` swap | N |
7.11 | Regular expression algorithms | N |
7.11.1 | exceptions | N |
7.11.2 | `regex_match` | N |
7.11.3 | `regex_search` | N |
7.11.4 | `regex_replace` | N |
7.12 | Regular expression Iterators | N |
7.12.1 | Class template `regex_iterator` | N |
7.12.1.1 | `regex_iterator` constructors | N |
7.12.1.2 | `regex_iterator` comparisons | N |
7.12.1.3 | `regex_iterator` dereference | N |
7.12.1.4 | `regex_iterator` increment | N |
7.12.2 | Class template `regex_token_iterator` | N |
7.12.2.1 | `regex_token_iterator` constructors | N |
7.12.2.2 | `regex_token_iterator` comparisons | N |
7.12.2.3 | `regex_token_iterator` dereference | N |
7.12.2.4 | `regex_token_iterator` increment | N |
7.13 | Modified ECMAScript regular expression grammar | N |
8 | C Compatibility
8.1 | Additions to header `<complex>` | Y |
8.1.1 | Synopsis | Y |
8.1.2 | Function `acos` | Y |
8.1.3 | Function `asin` | Y |
8.1.4 | Function `atan` | Y |
8.1.5 | Function `acosh` | Y |
8.1.6 | Function `asinh` | Y |
8.1.7 | Function `atanh` | Y |
8.1.8 | Function `fabs` | Y |
8.1.9 | Additional Overloads | Y |
8.2 | Header `<ccomplex>` | N | DR 551
8.3 | Header `<complex.h>` | N | DR 551
8.4 | Additions to header `<cctype>` | Y |
8.4.1 | Synopsis | Y |
8.4.2 | Function `isblank` | Y |
8.5 | Additions to header `<ctype.h>` | Y |
8.6 | Header `<cfenv>` | Y |
8.6.1 | Synopsis | Y |
8.6.2 | Definitions | Y |
8.7 | Header `<fenv.h>` | Y |
8.8 | Additions to header `<cfloat>` | Y |
8.9 | Additions to header `<float.h>` | Y |
8.10 | Additions to header `<ios>` | N |
8.10.1 | Synopsis | N |
8.10.2 | Function `hexfloat` | N |
8.11 | Header `<cinttypes>` | Y |
8.11.1 | Synopsis | Y | DR 557
8.11.2 | Definitions | Y |
8.12 | Header `<inttypes.h>` | Y |
8.13 | Additions to header `<climits>` | Y |
8.14 | Additions to header `<limits.h>` | Y |
8.15 | Additions to header `<locale>` | N |
8.16 | Additions to header `<cmath>` | Y |
8.16.1 | Synopsis | Y |
8.16.2 | Definitions | Y |
8.16.3 | Function template definitions | Y |
8.16.4 | Additional overloads | Y | DR 568; DR 550
8.17 | Additions to header `<math.h>` | Y |
8.18 | Additions to header `<cstdarg>` | Y |
8.19 | Additions to header `<stdarg.h>` | Y |
8.20 | The header `<cstdbool>` | Y |
8.21 | The header `<stdbool.h>` | Y |
8.22 | The header `<cstdint>` | Y |
8.22.1 | Synopsis | Y |
8.22.2 | Definitions | Y |
8.23 | The header `<stdint.h>` | Y |
8.24 | Additions to header `<cstdio>` | Y |
8.24.1 | Synopsis | Y |
8.24.2 | Definitions | Y |
8.24.3 | Additional format specifiers | Y | C library dependency
8.24.4 | Additions to header `<stdio.h>` | Y |
8.25 | Additions to header `<cstdlib>` | Y |
8.25.1 | Synopsis | Y |
8.25.2 | Definitions | Y |
8.25.3 | Function `abs` | Y |
8.25.4 | Function `div` | Y |
8.26 | Additions to header `<stdlib.h>` | Y |
8.27 | Header `<ctgmath>` | Y | DR 551
8.28 | Header `<tgmath.h>` | Y | DR 551
8.29 | Additions to header `<ctime>` | Y | C library dependency
8.30 | Additions to header `<cwchar>` | Y |
8.30.1 | Synopsis | Y |
8.30.2 | Definitions | Y |
8.30.3 | Additional wide format specifiers | Y | C library dependency
8.31 | Additions to header `<wchar.h>` | Y |
8.32 | Additions to header `<cwctype>` | Y |
8.32.1 | Synopsis | Y |
8.32.2 | Function `iswblank` | Y |
8.33 | Additions to header `<wctype.h>` | Y |

## Implementation Specific Behavior

For behaviour which is specified by the 1998 and 2003 standards, see C++ 1998/2003 Implementation Specific Behavior. This section documents behaviour which is required by TR1.

3.6.4 [tr.func.bind.place]/1 There are 29 placeholders defined and the placeholder types are `Assignable`.