std::is_bind_expression - cppreference.com (original) (raw)

| | | | | ------------------------------------------------- | | ------------- | | template< class T > struct is_bind_expression; | | (since C++11) |

If T is a type produced by a call to std::bind (but not std::bind_front or std::bind_back), this template is derived from std::true_type. For any other type (unless user-specialized), this template is derived from std::false_type.

A program may specialize this template for a program-defined type T to implement UnaryTypeTrait with base characteristic of std::true_type to indicate that T should be treated by std::bind as if it were the type of a bind subexpression: when a bind-generated function object is invoked, a bound argument of this type will be invoked as a function object and will be given all the unbound arguments passed to the bind-generated object.

Contents

[edit] Helper variable template

| template< class T > constexpr bool is_bind_expression_v = is_bind_expression<T>::value; | | (since C++17) | | ----------------------------------------------------------------------------------------------- | | ------------- |

Inherited from std::integral_constant

Member constants

| | true if T is a function object generated by std::bind, false otherwise (public static member constant) | | ---------------------------------------------------------------------------------------------------------------------------------------------------- |

Member functions

| | converts the object to bool, returns value (public member function) | | ---------------------------------------------------------------------- | | | returns value (public member function) |

Member types

[edit] Example

#include #include #include   struct MyBind { typedef int result_type; int operator()(int a, int b) const { return a + b; } };   namespace std { template<> struct is_bind_expression : public true_type {}; }   int f(int n1, int n2) { return n1 + n2; }   int main() { // as if bind(f, bind(MyBind(), _1, _2), 2) auto b = std::bind(f, MyBind(), 2);   std::cout << "Adding 2 to the sum of 10 and 11 gives " << b(10, 11) << '\n'; }

Output:

Adding 2 to the sum of 10 and 11 gives 23

[edit] Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 2010 C++11 program-defined specializations couldonly be derived from std::false_type can be derived fromstd::true_type

[edit] See also

| | binds one or more arguments to a function object (function template) [edit] | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |