# C++ IS 29124

This table is based on the table of contents of ISO/IEC FDIS 29124 Doc No: N3060 Date: 2010-03-06 Extensions to the C++ Library to support mathematical special functions

Complete support for IS 29124 is in GCC 6.1 and later releases, when using at least C++11 (for older releases or C++98/C++03 use TR1 instead). For C++11 and C++14 the additions to the library are not declared by their respective headers unless `__STDCPP_WANT_MATH_SPEC_FUNCS__` is defined as a macro that expands to a non-zero integer constant. For C++17 the special functions are always declared (since GCC 7.1).

When the special functions are declared the macro `__STDCPP_MATH_SPEC_FUNCS__` is defined to `201003L`.

In addition to the special functions defined in IS 29124, for non-strict modes (i.e. `-std=gnu++NN` modes) the hypergeometric functions and confluent hypergeometric functions from TR1 are also provided, defined in namespace `__gnu_cxx`.

## C++ Special Functions Implementation Status

Section | Description | Status | Comments
7 | Macro names | Partial | No diagnostic for inconsistent definitions of `__STDCPP_WANT_MATH_SPEC_FUNCS__`
8 | Mathematical special functions | Y |
8.1 | Additions to header `<cmath>` synopsis | Y |
8.1.1 | associated Laguerre polynomials | Y |
8.1.2 | associated Legendre functions | Y |
8.1.3 | beta function | Y |
8.1.4 | (complete) elliptic integral of the first kind | Y |
8.1.5 | (complete) elliptic integral of the second kind | Y |
8.1.6 | (complete) elliptic integral of the third kind | Y |
8.1.7 | regular modified cylindrical Bessel functions | Y |
8.1.8 | cylindrical Bessel functions (of the first kind) | Y |
8.1.9 | irregular modified cylindrical Bessel functions | Y |
8.1.10 | cylindrical Neumann functions | Y |
8.1.11 | (incomplete) elliptic integral of the first kind | Y |
8.1.12 | (incomplete) elliptic integral of the second kind | Y |
8.1.13 | (incomplete) elliptic integral of the third kind | Y |
8.1.14 | exponential integral | Y |
8.1.15 | Hermite polynomials | Y |
8.1.16 | Laguerre polynomials | Y |
8.1.17 | Legendre polynomials | Y |
8.1.18 | Riemann zeta function | Y |
8.1.19 | spherical Bessel functions (of the first kind) | Y |
8.1.20 | spherical associated Legendre functions | Y |
8.1.21 | spherical Neumann functions | Y |
8.2 | Additions to header `<math.h>` | Y |
8.3 | The header `<ctgmath>` | Partial | Conflicts with C++ 2011 requirements.
8.4 | The header `<tgmath.h>` | N | Conflicts with C++ 2011 requirements.

For behaviour which is specified by the 2011 standard, see C++ 2011 Implementation Specific Behavior. This section documents behaviour which is required by IS 29124.

7.2 [macro.user]/3 /4 The functions declared in Clause 8 are only declared when `__STDCPP_WANT_MATH_SPEC_FUNCS__ == 1` (or in C++17 mode, for GCC 7.1 and later).

8.1.1 [sf.cmath.Lnm]/1 The effect of calling these functions with `n >= 128` or `m >= 128` should be described here.

8.1.2 [sf.cmath.Plm]/3 The effect of calling these functions with `l >= 128` should be described here.

8.1.3 [sf.cmath.I]/3 The effect of calling these functions with `nu >= 128` should be described here.

8.1.8 [sf.cmath.J]/3 The effect of calling these functions with `nu >= 128` should be described here.

8.1.9 [sf.cmath.K]/3 The effect of calling these functions with `nu >= 128` should be described here.

8.1.10 [sf.cmath.N]/3 The effect of calling these functions with `nu >= 128` should be described here.

8.1.15 [sf.cmath.Hn]/3 The effect of calling these functions with `n >= 128` should be described here.

8.1.16 [sf.cmath.Ln]/3 The effect of calling these functions with `n >= 128` should be described here.

8.1.17 [sf.cmath.Pl]/3 The effect of calling these functions with `l >= 128` should be described here.

8.1.19 [sf.cmath.j]/3 The effect of calling these functions with `n >= 128` should be described here.

8.1.20 [sf.cmath.Ylm]/3 The effect of calling these functions with `l >= 128` should be described here.

8.1.21 [sf.cmath.n]/3 The effect of calling these functions with `n >= 128` should be described here.