You can pass a user-defined type as a parameter to a function processed by arbb::call() if it satisfies the following constraints:
The type has a public default constructor, copy constructor, assignment operator, and non-virtual destructor. All these functions must be either implicitly declared or behave as implicitly declared.
All non-static member variables of the types must be instances of Intel® Array Building Blocks (Intel® ArBB) scalar types, container types, or other valid user-defined types.
If the type has any base classes, they must be valid user-defined types.
For example, a simple C++ struct containing only data members of Intel ArBB types satisfies these constraints as its constructors and assignment operator are implicitly declared. If you add simple functions to such structure, it remains a valid user-defined type. The rules above allow a type to be passed to a function and compiled and executed through Intel ArBB. If a class complying to these rules does not contain any container members, you can also use it as an element type for an Intel ArBB container such as arbb::dense.