<div dir="ltr">Hello Clang experts,<div><br></div><div>it seems that -Wglobal-constructors throws a warning on a global using a constexpr default constructor on classes that don't strictly have POD members only. Given constexpr + no params implies all members are either POD or constexpr default constructible themselves, shouldn't Clang be able to avoid the global constructor in all cases?</div><div><br></div><div>e.g.:</div><div><br></div><div><div><font face="monospace">struct Foo {</font></div><div><font face="monospace"> public:</font></div><div><font face="monospace">  constexpr Foo() = default;</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">  std::unique_ptr<int> my_int_; --> std::unique_ptr's default constructor <a href="http://en.cppreference.com/w/cpp/memory/unique_ptr/unique_ptr" class="cremed">is constexpr</a></font></div><div><font face="monospace">};</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">Foo f;  --> error: declaration requires a global destructor [-Werror,-Wglobal-constructors]</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">void Init() {</font></div><div><font face="monospace">  printf("%d", *f.my_int_);</font></div><div><font face="monospace">}</font></div></div><div><br></div><div>Is this expected?</div><div><br></div><div>Thanks,</div><div>Gab</div></div>