This component‐private class template contains the physical representation and provides the variadic interfaces for bsl::function (see class and component documentation for bsl::function). bsl::function publicly inherits from an instantiation of this template. This implementation class exists to 1) minimize the amount of variadic template expansion required in C++03 using the sim_cpp11_features.pl utility and 2) work around issues with the Sun CC compiler, which has trouble with argument type deduction when a template argument has a partial specialization (as Function_Variadic does). bsl::function does not have a partial specialization and delegates to the Function_Variadic base class only those parts of the interface and implementation that depend on decomposing the function prototype into a return type and variadic list of argument types.

Synopsis

Declared in <bslstl_function.h>

template<
    class RET,
    class... ARGS>
class Function_Variadic<RET(ARGS...)>
    : public Function_ArgTypes<RET(ARGS...)>

Base Classes

Name

Description

Function_ArgTypes<RET(ARGS...)>

This component‐private struct template provides the following nested typedefs for bsl::function for a specified PROTOTYPE which must be a function type: ` argument_type ‐‐ Only if PROTOTYPE takes exactly one argument first_argument_type ‐‐ Only if PROTOTYPE takes exactly two arguments second_argument_type ‐‐ Only if PROTOTYPE takes exactly two arguments ` The C++ Standard requires that function define these typedefs for compatibility with one‐ and two‐argument legacy (now deprecated) functor adaptors. bsl::function publicly inherits from an instantiation of this template in order to conditionally declare the above nested types. This primary (unspecialized) template provides no typedefs.

Type Aliases

Member Functions

Name

Description

Function_Variadic [constructor]

Create an empty object. Use the specified allocator (e.g., the address of a bslma::Allocator) to supply memory.

operator()

If this object is empty, throw bsl::bad_function_call; otherwise invoke the target object with the specified args... and return the result (after conversion to RET). Note that, even though it is declared const, this call operator can mutate the target object and is thus considered a manipulator rather than an accessor.

Protected Data Members

Name

d_rep

Friends

Name

Description

bsl::function

Forward declaration.

Created with MrDocs