reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    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
// Integer literals
const char Ch1 = 'a';
const signed char Ch2 = 'b';
const unsigned char Ch3 = 'c';

const wchar_t Ch4 = L'd';
const signed wchar_t Ch5 = L'e';
const unsigned wchar_t Ch6 = L'f';

const short C1 = 12;
const unsigned short C2 = 13;

const int C3 = 12;
const unsigned int C4 = 13;

const long C5 = 22;
const unsigned long C6 = 23;

const long long C7 = 66;
const unsigned long long C8 = 67;


// String literals
const char str1[] = "ABCD";
const char str2[] = "ABCD" "0123";

const wchar_t wstr1[] = L"DEF";
const wchar_t wstr2[] = L"DEF" L"123";


// Boolean literals
const bool bval1 = true;
const bool bval2 = false;

// Floating Literals
const float F1 = 12.2F;
const double F2 = 1E4;
const long double F3 = 1.2E-3L;


// nullptr literal
const void *vptr = nullptr;


int glb_1[4] = { 10, 20, 30, 40 };

struct S1 {
  int a;
  int b[3];
};

struct S2 {
  int c;
  S1 d;
};

S2 glb_2 = { 22, .d.a = 44, .d.b[0] = 55, .d.b[1] = 66 };

void testNewThrowDelete() {
  throw;
  char *p = new char[10];
  delete[] p;
}

int testArrayElement(int *x, int n) {
  return x[n];
}

int testTernaryOp(int c, int x, int y) {
  return c ? x : y;
}

S1 &testConstCast(const S1 &x) {
  return const_cast<S1&>(x);
}

S1 &testStaticCast(S1 &x) {
  return static_cast<S1&>(x);
}

S1 &testReinterpretCast(S1 &x) {
  return reinterpret_cast<S1&>(x);
}

S1 &testDynamicCast(S1 &x) {
  return dynamic_cast<S1&>(x);
}

int testScalarInit(int x) {
  return int(x);
}

struct S {
  float f;
  double d;
};
struct T {
  int i;
  struct S s[10];
};

void testOffsetOf() {
  __builtin_offsetof(struct T, s[2].d);
}


int testDefaultArg(int a = 2*2) {
  return a;
}

int testDefaultArgExpr() {
  return testDefaultArg();
}

template <typename T> // T has TemplateTypeParmType
void testTemplateTypeParmType(int i);

void useTemplateType() {
  testTemplateTypeParmType<char>(4);
}

const bool ExpressionTrait = __is_lvalue_expr(1);
const unsigned ArrayRank = __array_rank(int[10][20]);
const unsigned ArrayExtent = __array_extent(int[10][20], 1);

constexpr int testLambdaAdd(int toAdd) {
  const int Captured1 = 1, Captured2 = 2;
  constexpr auto LambdaAdd = [Captured1, Captured2](int k) -> int {
    return Captured1 + Captured2 + k;
  };
  return LambdaAdd(toAdd);
}

template<typename T>
struct TestLambdaTemplate {
  T i, j;
  TestLambdaTemplate(T i, const T &j) : i(i), j(j) {}
  T testLambda(T k) {
    return [this](T k) -> decltype(auto) { return i + j + k; }(k);
  }
};