General Utility Library for C++14  2.11
Metaprogramming Utilities and Type Traits

The library provides some utilities for template metaprogramming:

invoke: A function template that calls a callable object with a given set of arguments. This is a backport of std::invoke from C++17.

invoke_result, invoke_result_t: A metafunction that computes the result of invoking a callable object with the given arguments. This is a backport of std::invoke_result from C++17.

is_invocable, is_invocable_r: A type trait that checks whether a callable object can be invoked with a given set of arguments. This is a backport of std::is_invocable from C++17.

IsContainerLike: A type trait to determine if a type behaves like a standard container.

OverloadSet and make_overload_set(): A function object type that works like an overload set of functions, and a helper function to create such an object from a bunch of lambdas.

remove_cvref: A metafunction to remove const, volatile, and reference qualifiers from a type. This is a backport of std::remove_cvref from C++20.

void_t: A template typedef that maps an arbitrary list of types to void. This is primarily useful to detect ill-formed types for SFINAE. This is a backport of std::void_t from C++17.