読者です 読者をやめる 読者になる 読者になる

とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

literal type

C++

リテラル型(literal type)とは。

規格

C++11 N3337(PDF) 3.9/10

A type is a literal type if it is:
— a scalar type; or
— a reference type referring to a literal type; or
— an array of literal type; or
— a class type (Clause 9) that has all of the following properties:
  — it has a trivial destructor,
  — every constructor call and full-expression in the brace-or-equal-initializers for non-static data
    members (if any) is a constant expression (5.19),
  — it is an aggregate type (8.5.1) or has at least one constexpr constructor or constructor template
    that is not a copy or move constructor, and
  — all of its non-static data members and base classes are of literal types.

以下の要件を満たす型がリテラル型である。

参考

完結式(full-expression)とは

N3337(PDF) 1.9/10

A full-expression is an expression that is not a subexpression of another expression.

他の式の部分式となっていない式を完結式(full-expression)と呼ぶ。(引用は一部なので詳細を知りたい場合は該当箇所を参照。)

brace-or-equal-initializerとは

構文が定義されている。砕けた説明では「{ }あるいは=を使った初期化子のこと」である。

N3337(PDF) 8.5/1

brace-or-equal-initializer:
  = initializer-clause
  braced-init-list

initializer-clause:
  assignment-expression
  braced-init-list

initializer-list:
  initializer-clause ...opt
  initializer-list , initializer-clause ...opt

braced-init-list:
  { initializer-list ,opt }
  { }

リンク