Utility library

< cpp

C++ includes a variety of utility libraries that provide functionality ranging from bit-counting to partial function application. These libraries can be broadly divided into two groups:

  • language support libraries, and
  • general-purpose libraries.

Language support

Language support libraries provide classes and functions that interact closely with language features and support common language idioms.

Type support

Basic types (e.g. std::size_t, std::nullptr_t), RTTI (e.g. std::type_info), type traits (e.g. std::is_integral, std::rank)

Dynamic memory management

Smart pointers (e.g. std::shared_ptr), allocators (e.g. std::allocator or std::memory_resource), C-style memory management (e.g. std::malloc)

Error handling

Exceptions (e.g. std::exception, std::terminate), assertions (e.g. assert)

Initializer lists

allows the use of initializer list syntax to initialize non-aggregate types
(class template)

Variadic functions

Support for functions that take an arbitrary number of parameters (via e.g. va_start, va_arg, va_end)

Implementation properties

The header <version> supplies implementation-dependent information about the C++ standard library (such as the version number and release date. It also defines the library feature-test macros.

(since C++20)

General-purpose utilities

Program utilities

Termination (e.g. std::abort, std::atexit), environment (e.g. std::system), signals (e.g. std::raise)

Date and time

Time tracking (e.g. std::chrono::time_point, std::chrono::duration), C-style date and time (e.g. std::time, std::clock)

Bitset

implements constant length bit array
(class)

Function objects

Partial function application (e.g. std::bind) and related utilities: utilities for binding such as std::ref and std::placeholders, polymorphic function wrappers: std::function, predefined functors (e.g. std::plus, std::equal_to), method to function converters std::mem_fn.

Optional, variant and any

Defined in header <optional>
(C++17)
a wrapper that may or may not hold an object
(class template)
 
Defined in header <variant>
(C++17)
a type-safe discriminated union
(class template)
 
Defined in header <any>
(C++17)
Objects that hold instances of any CopyConstructible type.
(class)
 
Defined in header <utility>
in-place construction tag
(class template)

Pairs and tuples

implements binary tuple, i.e. a pair of values
(class template)
(C++11)
implements fixed size container, which holds elements of possibly different types
(class template)
(C++17)
calls a function with a tuple of arguments
(function template)
Construct an object with a tuple of arguments
(function template)
tag type used to select correct function overload for piecewise construction
(class)
an object of type piecewise_construct_t used to disambiguate functions for piecewise construction
(constant)
implements compile-time sequence of integers
(class template)

Swap, forward and move

Defined in header <utility>
swaps the values of two objects
(function template)
(C++14)
replaces the argument with a new value and returns its previous value
(function template)
(C++11)
forwards a function argument
(function template)
(C++11)
obtains an rvalue reference
(function template)
obtains an rvalue reference if the move constructor does not throw
(function template)
Defined in header <concepts>
swaps the values of two objects
(customization point object)

Type operations

Defined in header <utility>
(C++11)
obtains a reference to its argument for use in unevaluated context
(function template)
(C++17)
obtains a reference to const to its argument
(function template)
 
Defined in header <new>
(C++17)
pointer optimization barrier
(function template)

Relational operators and comparison

Defined in header <compare>
the result type of 3-way comparison that supports only equality/inequality and is not substitutable
(class)
the result type of 3-way comparison that supports only equality/inequality and is substitutable
(class)
the result type of 3-way comparison that supports all 6 operators, is not substitutable, and allows incomparable values
(class)
the result type of 3-way comparison that supports all 6 operators and is not substitutable
(class)
the result type of 3-way comparison that supports all 6 operators and is substitutable
(class)
named comparison functions
(function)
the strongest comparison category to which all of the given types can be converted
(class template)
performs 3-way comparison and produces a result of type std::strong_ordering
(function template)
performs 3-way comparison and produces a result of type std::weak_ordering
(function template)
performs 3-way comparison and produces a result of type std::partial_ordering
(function template)
performs 3-way comparison and produces a result of type std::strong_equality
(function template)
performs 3-way comparison and produces a result of type std::weak_equality
(function template)
 
Defined in header <utility>
Defined in namespace std::rel_ops
automatically generates comparison operators based on user-defined operator== and operator<
(function template)

Elementary string conversions

In addition to sophisticated locale-dependent parsers and formatters provided by the C++ I/O library, the C I/O library, C++ string converters, and C string converters, the header <charconv> provides light-weight, locale-independent, non-allocating, non-throwing, ASCII-only parsers and formatters for arithmetic types.

Defined in header <charconv>
(C++17)
converts an integer or floating-point value to a character sequence
(function)
converts a character sequence to an integer or floating-point value
(function)
specifies formatting for std::to_chars and std::from_chars
(enum)

Hash support

(C++11)
hash function object
(class template)