File: main.cpp

package info (click to toggle)
llvm-toolchain-19 1%3A19.1.7-6
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,998,552 kB
  • sloc: cpp: 6,951,682; ansic: 1,486,157; asm: 913,598; python: 232,024; f90: 80,126; objc: 75,281; lisp: 37,276; pascal: 16,990; sh: 10,009; ml: 5,058; perl: 4,724; awk: 3,523; makefile: 3,177; javascript: 2,504; xml: 892; fortran: 664; cs: 573
file content (149 lines) | stat: -rw-r--r-- 4,570 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <limits>

enum Enum {
  enum_case1 = 1,
  enum_case2 = 2,
};

enum EnumBool : bool {
  enum_bool_case1 = false,
  enum_bool_case2 = true,
};

enum class ScopedEnum {
  scoped_enum_case1 = 1,
  scoped_enum_case2 = 2,
};

enum class ScopedCharEnum : char {
  case1 = 1,
  case2 = 2,
};

enum class ScopedLongLongEnum : long long {
  case0 = std::numeric_limits<long long>::min(),
  case1 = 1,
  case2 = std::numeric_limits<long long>::max(),
};

struct A {
  const static int int_val = 1;
  const static int int_val_with_address = 2;
  const static bool bool_val = true;

  const static auto char_max = std::numeric_limits<char>::max();
  const static auto schar_max = std::numeric_limits<signed char>::max();
  const static auto uchar_max = std::numeric_limits<unsigned char>::max();
  const static auto int_max = std::numeric_limits<int>::max();
  const static auto uint_max = std::numeric_limits<unsigned>::max();
  const static auto long_max = std::numeric_limits<long>::max();
  const static auto ulong_max = std::numeric_limits<unsigned long>::max();
  const static auto longlong_max = std::numeric_limits<long long>::max();
  const static auto ulonglong_max =
      std::numeric_limits<unsigned long long>::max();
  const static auto wchar_max = std::numeric_limits<wchar_t>::max();

  const static auto char_min = std::numeric_limits<char>::min();
  const static auto schar_min = std::numeric_limits<signed char>::min();
  const static auto uchar_min = std::numeric_limits<unsigned char>::min();
  const static auto int_min = std::numeric_limits<int>::min();
  const static auto uint_min = std::numeric_limits<unsigned>::min();
  const static auto long_min = std::numeric_limits<long>::min();
  const static auto ulong_min = std::numeric_limits<unsigned long>::min();
  const static auto longlong_min = std::numeric_limits<long long>::min();
  const static auto ulonglong_min =
      std::numeric_limits<unsigned long long>::min();
  const static auto wchar_min = std::numeric_limits<wchar_t>::min();

  const static Enum enum_val = enum_case2;
  const static EnumBool enum_bool_val = enum_bool_case1;
  const static ScopedEnum scoped_enum_val = ScopedEnum::scoped_enum_case2;
  const static ScopedEnum not_enumerator_scoped_enum_val = static_cast<ScopedEnum>(5);
  const static ScopedEnum not_enumerator_scoped_enum_val_2 =
      static_cast<ScopedEnum>(7);
  const static ScopedCharEnum scoped_char_enum_val = ScopedCharEnum::case2;
  const static ScopedLongLongEnum scoped_ll_enum_val_neg =
      ScopedLongLongEnum::case0;
  const static ScopedLongLongEnum scoped_ll_enum_val =
      ScopedLongLongEnum::case2;
};

const int A::int_val_with_address;

struct ClassWithOnlyConstStatic {
  const static int member = 3;
};

struct ClassWithConstexprs {
  constexpr static int member = 2;
  constexpr static Enum enum_val = enum_case2;
  constexpr static ScopedEnum scoped_enum_val = ScopedEnum::scoped_enum_case2;
} cwc;

struct ClassWithEnumAlias {
  using EnumAlias = ScopedEnum;
  static constexpr EnumAlias enum_alias = ScopedEnum::scoped_enum_case2;

  using EnumAliasAlias = EnumAlias;
  static constexpr EnumAliasAlias enum_alias_alias =
      ScopedEnum::scoped_enum_case1;
};

namespace ns {
struct Foo {
  constexpr static int mem = 10;

  void bar() { return; }
};
} // namespace ns

struct Foo {
  constexpr static int mem = -29;
};

int func() {
  Foo f1;
  ns::Foo f2;
  f2.bar();
  return ns::Foo::mem + Foo::mem;
}

int main() {
  A a;

  auto char_max = A::char_max;
  auto schar_max = A::schar_max;
  auto uchar_max = A::uchar_max;
  auto int_max = A::int_max;
  auto uint_max = A::uint_max;
  auto long_max = A::long_max;
  auto ulong_max = A::ulong_max;
  auto longlong_max = A::longlong_max;
  auto ulonglong_max = A::ulonglong_max;
  auto wchar_max = A::wchar_max;

  auto char_min = A::char_min;
  auto schar_min = A::schar_min;
  auto uchar_min = A::uchar_min;
  auto int_min = A::int_min;
  auto uint_min = A::uint_min;
  auto long_min = A::long_min;
  auto ulong_min = A::ulong_min;
  auto longlong_min = A::longlong_min;
  auto ulonglong_min = A::ulonglong_min;
  auto wchar_min = A::wchar_min;

  int member_copy = ClassWithOnlyConstStatic::member;

  Enum e = A::enum_val;
  ScopedEnum se = A::scoped_enum_val;
  se = A::not_enumerator_scoped_enum_val;
  ScopedCharEnum sce = A::scoped_char_enum_val;
  ScopedLongLongEnum sle = A::scoped_ll_enum_val;

  auto enum_alias_val = ClassWithEnumAlias::enum_alias;
  auto enum_alias_alias_val = ClassWithEnumAlias::enum_alias_alias;
  auto ret = func();

  return 0; // break here
}