xref: /llvm-project/clang-tools-extra/docs/clang-tidy/checks/fuchsia/statically-constructed-objects.rst (revision 93f9f63b2d3e04ec4abd79fb8119a685d9f750c6)
1.. title:: clang-tidy - fuchsia-statically-constructed-objects
2
3fuchsia-statically-constructed-objects
4======================================
5
6Warns if global, non-trivial objects with static storage are constructed, unless
7the object is statically initialized with a ``constexpr`` constructor or has no
8explicit constructor.
9
10For example:
11
12.. code-block:: c++
13
14  class A {};
15
16  class B {
17  public:
18    B(int Val) : Val(Val) {}
19  private:
20    int Val;
21  };
22
23  class C {
24  public:
25    constexpr C(int Val) : Val(Val) {}
26    C(int Val1, int Val2) : Val(Val1+Val2) {}
27
28  private:
29    int Val;
30  };
31
32  static A a;         // No warning, as there is no explicit constructor
33  static C c(0);      // No warning, as constructor is constexpr
34
35  static B b(0);      // Warning, as constructor is not constexpr
36  static C c2(0, 1);  // Warning, as constructor is not constexpr
37
38  static int i;       // No warning, as it is trivial
39
40  extern int get_i();
41  static C c3(get_i());// Warning, as the constructor is dynamically initialized
42
43See the features disallowed in Fuchsia at https://fuchsia.dev/fuchsia-src/development/languages/c-cpp/cxx?hl=en
44