1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
#include <concepts>
#include <iostream>
#include <utility>
#include <string>
//invocable
template <typename Function, typename ...Params>
void fun(Function &&fun, Params &&...params)
requires std::invocable<Function, Params ...>
{
fun(std::forward<Params>(params)...);
}
void hello(int value, char const *txt, std::string const &str)
{
std::cout << value << ' ' << txt << ' ' << str << '\n';
}
int main()
{
fun(hello, 1, "text", "string"); // promotions are still OK
// fun(hello, 1); // WC: not invocable
}
//=
|