[#BloombergLP-bsltf-DegenerateFunctor] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bsltf.adoc[bsltf]::DegenerateFunctor :relfileprefix: ../../ :mrdocs: This test class template adapts a CopyConstructible class to offer a minimal or outright obstructive interface for testing generic code. To support the testing of standard containers, this adapter will be MoveConstructible, CopyConstructible, and nothrow Destructible as long as the adapted `FUNCTOR` satisfies the same requirements. This class will further be Swappable if (the template parameter) `ENABLE_SWAP` is `true` and the adapted `FUNCTOR` is MoveConstructible. The (inherited) function call operator should be the only other available method, no other operation (e.g., the unary address‐of operator) should be usable. We take advantage of the fact that defining a copy constructor inhibits the generation of a default constructor, and that constructors are not inherited by a derived class. `DegenerateFunctor` objects must be created through either the copy constructor, or by wrapping a `FUNCTOR` object through the static factory method of this class, `cloneBaseObject`. == Synopsis Declared in `<bsltf_degeneratefunctor.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template< class FUNCTOR, bool ENABLE_SWAP = true> class DegenerateFunctor; ---- == Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bsltf/DegenerateFunctor/2constructor-00.adoc[`DegenerateFunctor`] [.small]#[constructor]# | Constructors | xref:BloombergLP/bsltf/DegenerateFunctor/exchangeValues.adoc[`exchangeValues`] | Swap the wrapped `FUNCTOR` object, by move‐constructing a temporary object from the specified `*other`, then alternately destroying and in‐place move‐constructing new values for each of `*other` and `*this`. Note that this function is deliberately _not_ named `swap` as some "clever" template libraries may try to call a member‐swap function when they can find it, and ADL‐swap is not available. Also note that this overload is needed only so that the ADL‐enabling free‐function `swap` can be defined, as the native std library `std::swap` function will not accept this class (with its deliberate degenerate nature) on AIX, or on Windows with Visual C++ prior to VC2010. |=== == Static Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bsltf/DegenerateFunctor/cloneBaseObject.adoc[`cloneBaseObject`] | Create a DegenerateFunctor object wrapping a copy of the specified `base`. Note that this method is supplied so that the only publicly accessible constructor is the copy constructor. |=== == Using Declarations [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bsltf/DegenerateFunctor/operator().adoc[`operator()`] | Expose the overloaded function call operator from the parameterizing class `FUNCTOR`. |=== == Non-Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bsltf/swap-02.adoc[`swap`] | Exchange the values of the specified `lhs` and `rhs` objects. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#