File: lambdaconstexpr.cc

package info (click to toggle)
c%2B%2B-annotations 13.02.02-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,576 kB
  • sloc: cpp: 25,297; makefile: 1,523; ansic: 165; sh: 126; perl: 90; fortran: 27
file content (58 lines) | stat: -rw-r--r-- 1,130 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
constexpr int add(int n)
{
//    return [n] () constexpr { return n > 10 ? n - 10 : n + 10; }();
    return [n]  { return n > 10 ? n - 10 : n + 10; }();
}

auto id = [] (int n ) constexpr { return n; };
constexpr int x = id(4);

auto id2 = [] (int n ) { return n; };
constexpr int x2 = id2(4);

auto add2 = [] (int n) { return n + 10 ; };

int constexpr (*fp)(int) = add2;

static_assert(fp(3) == add2(3), "");

auto monoid = [](auto v)
                {
                    return [=]
                            { return v;
                            };
                };

auto add3 = [](auto m1) constexpr
{
    auto ret = m1();
    return [=] (auto m2) mutable
    {
        auto m1val = m1();
        auto plus = [=] (auto m2val) mutable constexpr
                    {
                        return m1val += m2val;
                    };
        ret = plus(m2());
        return monoid(ret);
    };
};

//ifconst
void positive();
void negative();

template <int value>
void fun()
{
    if constexpr (value > 0)
        positive();
    else if constexpr (value < 0)
        negative();
}

int main()
{
    fun<4>();
}
//=