Is there a way to pass auto as an argument to another function?
int function(auto data) { //DOES something }
We cannot pass the function as an argument to another function. But we can pass the reference of a function as a parameter by using a function pointer. This process is known as call by reference as the function parameter is passed as a pointer that holds the address of arguments.
Because functions are objects we can pass them as arguments to other functions. Functions that can accept other functions as arguments are also called higher-order functions.
C++20 allows auto as function parameter typeAs an abbreviated function template. A placeholder-type-specifier designates a placeholder type that will be replaced later by deduction from an initializer.
auto
as function parameter typeThis code is valid using C++20:
int function(auto data) { // do something, there is no constraint on data }
As an abbreviated function template.
This is a special case of a non constraining type-constraint (i.e. unconstrained auto parameter). Using concepts, the constraining type-constraint version (i.e. constrained auto parameter) would be for example:
void function(const Sortable auto& data) { // do something that requires data to be Sortable // assuming there is a concept named Sortable }
The wording in the spec, with the help of my friend Yehezkel Bernat:
9.2.8.5 Placeholder type specifiers [dcl.spec.auto]
placeholder-type-specifier:
type-constraintopt auto
type-constraintopt decltype ( auto )
A placeholder-type-specifier designates a placeholder type that will be replaced later by deduction from an initializer.
A placeholder-type-specifier of the form type-constraintopt auto can be used in the decl-specifier-seq of a parameter-declaration of a function declaration or lambda-expression and signifies that the function is an abbreviated function template (9.3.3.5) ...
If you want that to mean that you can pass any type to the function, make it a template:
template <typename T> int function(T data);
There's a proposal for C++17 to allow the syntax you used (as C++14 already does for generic lambdas), but it's not standard yet.
Edit: C++ 2020 now supports auto function parameters. See Amir's answer below
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With