Skip to content

败犬日报 2024-11-26

1. member class 不完整类型编译报错

cpp
#include <optional>

class Test {
   public:
    Test();

   private:
    class Dummy {
        int dummy = 0;
    };

    std::optional<Dummy> dummy_;
};

Test::Test() { dummy_.emplace(); }

编译报错,因为实例化 std::optional<Dummy> 的时候,Dummy 还是个不完整类型。

https://stackoverflow.com/questions/75814971/weird-interaction-among-optional-nested-classes-and-is-constructible

不用 member class 就行了。

2. [[gnu::constructor]] 函数执行不保证在全局变量的初始化后

所有的初始化顺序都不能保证。

可以用 gcc 的 init_priority 控制。