[#BloombergLP-bslstl-Function_Variadic-08] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bslstl.adoc[bslstl]::xref:BloombergLP/bslstl/Function_Variadic-0e.adoc[Function_Variadic]<RET(ARGS...)> :relfileprefix: ../../ :mrdocs: 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>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template< class RET, class... ARGS> class xref:BloombergLP/bslstl/Function_Variadic-0e.adoc[Function_Variadic]<RET(ARGS...)> : public xref:BloombergLP/bslstl/Function_ArgTypes-06.adoc[Function_ArgTypes<RET(ARGS...)>] ---- == Base Classes [cols="1,4"] |=== | Name| Description | `xref:BloombergLP/bslstl/Function_ArgTypes-06.adoc[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 [cols="1"] |=== | Name | xref:BloombergLP/bslstl/Function_Variadic-08/allocator_type.adoc[`allocator_type`] | xref:BloombergLP/bslstl/Function_Variadic-08/result_type.adoc[`result_type`] |=== == Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bslstl/Function_Variadic-08/2constructor.adoc[`Function_Variadic`] [.small]#[constructor]# | Create an empty object. Use the specified `allocator` (e.g., the address of a `bslma::Allocator`) to supply memory. | xref:BloombergLP/bslstl/Function_Variadic-08/operator_call.adoc[`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 [cols="1"] |=== | Name | xref:BloombergLP/bslstl/Function_Variadic-08/d_rep.adoc[`d_rep`] |=== == Friends [cols="1,4"] |=== | Name| Description | `xref:bsl/function-0a.adoc[bsl::function]` | Forward declaration. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#