<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Thu, Jan 25, 2018 at 4:32 PM James Dennett <<a href="mailto:james.dennett@gmail.com">james.dennett@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Jan 25, 2018 at 4:11 AM, Gabriel Charette via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank" class="cremed">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hello Clang/C++ experts!</div><div><br></div><div>I'm confused on what it takes to be std::is_trivial_default_constructible?</div></div></blockquote><div><br></div></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>To be trivially default constructible means to be default constructible *without doing anything*.</div></div></div></div></blockquote><div><br></div><div>Right... What I want is way to tell if the compiler will evaluate this at compile-time (e.g. to guarantee no static initializer for globals of trivial types with only zero-initialized POD members).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><br></div>This doesn't even compile (leaving x_ uninitialized compiles but I don't see why it's not trivial to initialize a POD member inline):<div><br></div><div><div>class Test {</div><div> public:</div><div>  int x_ = 0;</div><div>};</div><div><br></div><div>static_assert(std::is_trivially_default_constructible<Test>::value, "");</div></div><div><br></div><div>-> error: static_assert failed due to requirement 'std::is_trivially_default_constructible<Test>::value' ""</div><div><br></div><div>I also tried making a constexpr Test() = default; constructor but I can't get anything with POD members initialized inline to pass the std::is_trivially_default_constructible test...?!</div><div><br></div></div></blockquote><div><br></div></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>If you need to initialize something, that's not trivial.</div></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>-- James </div></div></div></div></blockquote></div></div>