46 lines
996 B
C++
46 lines
996 B
C++
#include <utility> // for std::forward
|
|
#include <iostream>
|
|
|
|
|
|
static int total = 0;
|
|
static void add(int n)
|
|
{
|
|
std::cout << "Adding " << n << std::endl;
|
|
total += n;
|
|
}
|
|
|
|
static void display(const char message[])
|
|
{
|
|
std::cout << message << ": " << total << std::endl;
|
|
}
|
|
|
|
template <class Callable, typename... ArgTypes>
|
|
void* Call(Callable native_func, ArgTypes&&... args) noexcept
|
|
{
|
|
std::clog << "in Call" << std::endl;
|
|
return native_func(std::forward<ArgTypes>(args)...);
|
|
}
|
|
|
|
static void* test_lambda(int delta)
|
|
{
|
|
std::clog << "in test_lambda" << std::endl;
|
|
return Call([=](int delta)
|
|
{
|
|
std::clog << "in lambda" << std::endl;
|
|
add(delta);
|
|
display("total");
|
|
return nullptr;
|
|
}, delta);
|
|
}
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
std::clog << "start" << std::endl;
|
|
test_lambda(5);
|
|
std::clog << "after first call" << std::endl;
|
|
test_lambda(20);
|
|
std::clog << "after second call" << std::endl;
|
|
test_lambda(-256);
|
|
std::clog << "after third call" << std::endl;
|
|
return total != -231;
|
|
}
|