Wandbox
SettingsLog
SettingsLog
Language
GitHubLogin
Ran/Viewed Log

Language

C++

Compiler

clang 15.0.7

Options
Warnings
Boost 1.80.0
C++2b(GNU)
no pedantic

$ clang++ prog.cc -Wall -Wextra -I/opt/wandbox/boost-1.80.0-clang-15.0.7/include -std=gnu++2b
***** free function demo *****       
        int square_num(int i)
        {
            return i*i;
        }
    
function<int(int)> {square_num}(-9)				 = 81
function<int(int)> {bind(square_num,placeholders::_1)}(9)	 = 81
function<int()>    {bind(square_num,9)}()			 = 81


***** struct demo *****       
        struct Foo
        {
            Foo(int num) : num_(num) {}
            void print_add(int i) const { cout << num_ + i << endl; }
            int num_;
        } foo {200};
    
function<void(const Foo&, int)>{&Foo::print_add}(foo, 100)			 = 300
function<int(Foo const&)> {&Foo::num_}(foo)					 = 200
function<void(int)> {bind(&Foo::print_add, foo, placeholders::_1)}(2)		 = 202
function<void(int)> {bind(&Foo::print_add, &foo, placeholders::_1)}(3)		 = 203


***** functor demo *****
function<int(int)>{negate<int>()}(18)		 = -18


***** lambda expression demo *****
function<void(int)> {[](int i) { cout << i << endl; }}(42)		 = 42
       
        auto factorial = [](int n)
        {
            // store a lambda object to emulate "recursive lambda"; aware of extra overhead
            function<int(int)> fac = [&](int n) 
            { 
                cout << n << ' '; 
                return (n < 2) ? 1 : fac(n - 1); 
            };
            // note that "auto fac = [&](int n) {...};" does not work in recursive calls
            fac(n);
        };
    
factorial(5)!	 = 5 4 3 2 1 
Exit Code:
0