<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div><blockquote type="cite" class=""><div class="">On Apr 9, 2018, at 3:47 PM, Akira Hatanaka <<a href="mailto:ahatanaka@apple.com" class="">ahatanaka@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Apr 5, 2018, at 1:25 PM, John McCall <<a href="mailto:rjmccall@apple.com" class="">rjmccall@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br class="Apple-interchange-newline"><br class=""><blockquote type="cite" class=""><div class="">On Apr 5, 2018, at 3:54 PM, Akira Hatanaka <<a href="mailto:ahatanaka@apple.com" class="">ahatanaka@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Apr 5, 2018, at 12:39 PM, John McCall <<a href="mailto:rjmccall@apple.com" class="">rjmccall@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><br class="Apple-interchange-newline"><br class=""><blockquote type="cite" class=""><div class="">On Apr 4, 2018, at 7:37 PM, Akira Hatanaka <<a href="mailto:ahatanaka@apple.com" class="">ahatanaka@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Apr 4, 2018, at 4:24 PM, Akira Hatanaka via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><blockquote type="cite" class=""><div class=""><br class="Apple-interchange-newline">On Apr 4, 2018, at 3:38 PM, Richard Smith <<a href="mailto:richard@metafoo.co.uk" class="">richard@metafoo.co.uk</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote">Hi Akira,</div><div class="gmail_quote"><br class=""></div><div class="gmail_quote">This change has broken the C++ versions of these type traits for classes with volatile members. Such classes are required to claim to be trivial per C++ DR 2094 (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2094" class="">http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2094</a>) but return false from isNonTrivialToPrimitiveCopy().</div><div class="gmail_quote"><br class=""></div></div></div></div></blockquote><br class=""></div><div class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;">Oh that’s right. The function returns false when isNonTrivialToPrimitiveCopy() returns PCK_VolatileTrivial. That is wrong.</div><div class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><div class="" style="orphans: 2; text-indent: -53px; widows: 2;"><font face="monospace, fixed" size="2" class=""><span class="" style="white-space: pre-wrap; background-color: rgb(251, 252, 253);"><br class=""></span></font></div><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote">Also, exposing these __has_* traits more widely seems like a backwards step to me: these traits are deprecated, near-useless, and we're trying to remove them. No code should be using them under any circumstances; the __is_* traits should be used instead.</div><div class="gmail_quote"><br class=""></div></div></div></div></blockquote><div class=""><br class=""></div><div class="">The __is_* traits (is_trivially_copy_constructible, etc.) are templates defined in libcxx, so it seems that we can’t use them when compiling in C mode. Is it OK to add their definitions to TokenKinds.def as non-C++ keywords?</div><div class=""><br class=""></div></div></div></blockquote><div class=""><br class=""></div>Or perhaps redefine the six __has_* traits used here as non-C++ (KEYNOCXX or ‘KEYC99 | KEYC11') keywords?</div></div></div></blockquote><div class=""><br class=""></div>I think Richard is talking about e.g. the __is_trivially_destructible intrinsic type trait function rather than std::is_trivially_destructible.</div><div class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><br class=""></div><div class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;">Do we have a concrete need to expose these type traits to C?</div><div class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><br class=""></div></div></blockquote><div class=""><br class=""></div>No, no one has asked any of these type traits to be exposed to C yet. Do you think we should just revert the patch and wait until someone asks for those type traits to be available in C?</div></div></div></blockquote><div class=""><br class=""></div>I think that would be fine.  Although it would be nice if we could save the part of the patch that makes the trait logic sensitive to the type queries instead of needing to include duplicated checks for __strong, __weak, and whatever other non-trivial C features we eventually add.</div><div style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br class=""></div></div></blockquote><div class=""><br class=""></div>Reverted r329289 in r329608. I wasn’t sure which part of the patch should be saved. I don’t think we need to check the properties of the types calling the QualType::isNonTrivialTo* functions since we aren’t exposing the type traits to C anymore?<br class=""></div></div></div></div></blockquote><div><br class=""></div>I mean that it would be nice if the queries could just consider the primitive type properties in the non-record case instead of having explicit extra checks for __strong/__weak and so on.</div><div><br class=""></div><div>John.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">John.</div><div style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><div class=""><div class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;">John.</div><div class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><br class=""><blockquote type="cite" class=""><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote">On 27 March 2018 at 17:12, Akira Hatanaka via cfe-commits<span class="Apple-converted-space"> </span><span dir="ltr" class=""><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank" class="">cfe-commits@lists.llvm.org</a>></span><span class="Apple-converted-space"> </span>wrote:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;">Author: ahatanak<br class="">Date: Tue Mar 27 17:12:08 2018<br class="">New Revision: 328680<br class=""><br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project?rev=328680&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project?rev=328680&view=rev</a><br class="">Log:<br class="">[ObjC] Make C++ triviality type traits available to non-trivial C<br class="">structs.<br class=""><br class="">r326307 and r327870 made changes that allowed using non-trivial C<br class="">structs with fields qualified with __strong or __weak. This commit makes<br class="">the following C++ triviality type traits available to non-trivial C<br class="">structs:<br class=""><br class="">__has_trivial_assign<br class="">__has_trivial_move_assign<br class="">__has_trivial_copy<br class="">__has_trivial_move_constructor<br class="">__has_trivial_constructor<br class="">__has_trivial_destructor<br class=""><br class=""><a href="rdar://problem/33599681" class="">rdar://problem/33599681</a><br class=""><br class="">Differential Revision:<span class="Apple-converted-space"> </span><a href="https://reviews.llvm.org/D44913" rel="noreferrer" target="_blank" class="">https://reviews.llvm.org/<wbr class="">D44913</a><br class=""><br class="">Added:<br class="">    cfe/trunk/test/SemaObjC/non-<wbr class="">trivial-struct-traits.m<br class="">Modified:<br class="">    cfe/trunk/include/clang/Basic/<wbr class="">TokenKinds.def<br class="">    cfe/trunk/lib/Sema/<wbr class="">SemaExprCXX.cpp<br class=""><br class="">Modified: cfe/trunk/include/clang/Basic/<wbr class="">TokenKinds.def<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TokenKinds.def?rev=328680&r1=328679&r2=328680&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/cfe/trunk/include/<wbr class="">clang/Basic/TokenKinds.def?<wbr class="">rev=328680&r1=328679&r2=<wbr class="">328680&view=diff</a><br class="">==============================<wbr class="">==============================<wbr class="">==================<br class="">--- cfe/trunk/include/clang/Basic/<wbr class="">TokenKinds.def (original)<br class="">+++ cfe/trunk/include/clang/Basic/<wbr class="">TokenKinds.def Tue Mar 27 17:12:08 2018<br class="">@@ -433,12 +433,12 @@ TYPE_TRAIT_1(__has_nothrow_<wbr class="">assign, HasNo<br class=""> TYPE_TRAIT_1(__has_nothrow_<wbr class="">move_assign, HasNothrowMoveAssign, KEYCXX)<br class=""> TYPE_TRAIT_1(__has_nothrow_<wbr class="">copy, HasNothrowCopy, KEYCXX)<br class=""> TYPE_TRAIT_1(__has_nothrow_<wbr class="">constructor, HasNothrowConstructor, KEYCXX)<br class="">-TYPE_TRAIT_1(__has_trivial_<wbr class="">assign, HasTrivialAssign, KEYCXX)<br class="">-TYPE_TRAIT_1(__has_trivial_<wbr class="">move_assign, HasTrivialMoveAssign, KEYCXX)<br class="">-TYPE_TRAIT_1(__has_trivial_<wbr class="">copy, HasTrivialCopy, KEYCXX)<br class="">-TYPE_TRAIT_1(__has_trivial_<wbr class="">constructor, HasTrivialDefaultConstructor, KEYCXX)<br class="">-TYPE_TRAIT_1(__has_trivial_<wbr class="">move_constructor, HasTrivialMoveConstructor, KEYCXX)<br class="">-TYPE_TRAIT_1(__has_trivial_<wbr class="">destructor, HasTrivialDestructor, KEYCXX)<br class="">+TYPE_TRAIT_1(__has_trivial_<wbr class="">assign, HasTrivialAssign, KEYALL)<br class="">+TYPE_TRAIT_1(__has_trivial_<wbr class="">move_assign, HasTrivialMoveAssign, KEYALL)<br class="">+TYPE_TRAIT_1(__has_trivial_<wbr class="">copy, HasTrivialCopy, KEYALL)<br class="">+TYPE_TRAIT_1(__has_trivial_<wbr class="">constructor, HasTrivialDefaultConstructor, KEYALL)<br class="">+TYPE_TRAIT_1(__has_trivial_<wbr class="">move_constructor, HasTrivialMoveConstructor, KEYALL)<br class="">+TYPE_TRAIT_1(__has_trivial_<wbr class="">destructor, HasTrivialDestructor, KEYALL)<br class=""> TYPE_TRAIT_1(__has_virtual_<wbr class="">destructor, HasVirtualDestructor, KEYCXX)<br class=""> TYPE_TRAIT_1(__is_abstract, IsAbstract, KEYCXX)<br class=""> TYPE_TRAIT_1(__is_aggregate, IsAggregate, KEYCXX)<br class=""><br class="">Modified: cfe/trunk/lib/Sema/<wbr class="">SemaExprCXX.cpp<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=328680&r1=328679&r2=328680&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/cfe/trunk/lib/Sema/<wbr class="">SemaExprCXX.cpp?rev=328680&r1=<wbr class="">328679&r2=328680&view=diff</a><br class="">==============================<wbr class="">==============================<wbr class="">==================<br class="">--- cfe/trunk/lib/Sema/<wbr class="">SemaExprCXX.cpp (original)<br class="">+++ cfe/trunk/lib/Sema/<wbr class="">SemaExprCXX.cpp Tue Mar 27 17:12:08 2018<br class="">@@ -4513,6 +4513,8 @@ static bool EvaluateUnaryTypeTrait(Sema<br class="">     // does not correctly compute triviality in the presence of multiple special<br class="">     // members of the same kind. Revisit this once the g++ bug is fixed.<br class="">   case UTT_<wbr class="">HasTrivialDefaultConstructor:<br class="">+    if (T.<wbr class="">isNonTrivialToPrimitiveDefault<wbr class="">Initialize())<br class="">+      return false;<br class="">     //<span class="Apple-converted-space"> </span><a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html" rel="noreferrer" target="_blank" class="">http://gcc.gnu.org/onlinedocs/<wbr class="">gcc/Type-Traits.html</a>:<br class="">     //   If __is_pod (type) is true then the trait is true, else if type is<br class="">     //   a cv class or union type (or array thereof) with a trivial default<br class="">@@ -4524,6 +4526,8 @@ static bool EvaluateUnaryTypeTrait(Sema<br class="">              !RD-><wbr class="">hasNonTrivialDefaultConstructo<wbr class="">r();<br class="">     return false;<br class="">   case UTT_HasTrivialMoveConstructor:<br class="">+    if (T.<wbr class="">isNonTrivialToPrimitiveDestruc<wbr class="">tiveMove())<br class="">+      return false;<br class="">     //  This trait is implemented by MSVC 2012 and needed to parse the<br class="">     //  standard library headers. Specifically this is used as the logic<br class="">     //  behind std::is_trivially_move_<wbr class="">constructible (20.9.4.3).<br class="">@@ -4533,6 +4537,8 @@ static bool EvaluateUnaryTypeTrait(Sema<br class="">       return RD->hasTrivialMoveConstructor(<wbr class="">) && !RD-><wbr class="">hasNonTrivialMoveConstructor()<wbr class="">;<br class="">     return false;<br class="">   case UTT_HasTrivialCopy:<br class="">+    if (T.<wbr class="">isNonTrivialToPrimitiveCopy())<br class="">+      return false;<br class="">     //<span class="Apple-converted-space"> </span><a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html" rel="noreferrer" target="_blank" class="">http://gcc.gnu.org/onlinedocs/<wbr class="">gcc/Type-Traits.html</a>:<br class="">     //   If __is_pod (type) is true or type is a reference type then<br class="">     //   the trait is true, else if type is a cv class or union type<br class="">@@ -4545,6 +4551,8 @@ static bool EvaluateUnaryTypeTrait(Sema<br class="">              !RD-><wbr class="">hasNonTrivialCopyConstructor()<wbr class="">;<br class="">     return false;<br class="">   case UTT_HasTrivialMoveAssign:<br class="">+    if (T.<wbr class="">isNonTrivialToPrimitiveDestruc<wbr class="">tiveMove())<br class="">+      return false;<br class="">     //  This trait is implemented by MSVC 2012 and needed to parse the<br class="">     //  standard library headers. Specifically it is used as the logic<br class="">     //  behind std::is_trivially_move_<wbr class="">assignable (20.9.4.3)<br class="">@@ -4554,6 +4562,8 @@ static bool EvaluateUnaryTypeTrait(Sema<br class="">       return RD->hasTrivialMoveAssignment() && !RD-><wbr class="">hasNonTrivialMoveAssignment();<br class="">     return false;<br class="">   case UTT_HasTrivialAssign:<br class="">+    if (T.<wbr class="">isNonTrivialToPrimitiveCopy())<br class="">+      return false;<br class="">     //<span class="Apple-converted-space"> </span><a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html" rel="noreferrer" target="_blank" class="">http://gcc.gnu.org/onlinedocs/<wbr class="">gcc/Type-Traits.html</a>:<br class="">     //   If type is const qualified or is a reference type then the<br class="">     //   trait is false. Otherwise if __is_pod (type) is true then the<br class="">@@ -4624,6 +4634,8 @@ static bool EvaluateUnaryTypeTrait(Sema<br class="">     return true;<br class=""><br class="">   case UTT_HasTrivialDestructor:<br class="">+    if (T.isDestructedType() == QualType::DK_nontrivial_c_<wbr class="">struct)<br class="">+      return false;<br class="">     //<span class="Apple-converted-space"> </span><a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html" rel="noreferrer" target="_blank" class="">http://gcc.gnu.org/onlinedocs/<wbr class="">gcc/Type-Traits.html</a><br class="">     //   If __is_pod (type) is true or type is a reference type<br class="">     //   then the trait is true, else if type is a cv class or union<br class=""><br class="">Added: cfe/trunk/test/SemaObjC/non-<wbr class="">trivial-struct-traits.m<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/non-trivial-struct-traits.m?rev=328680&view=auto" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/cfe/trunk/test/<wbr class="">SemaObjC/non-trivial-struct-<wbr class="">traits.m?rev=328680&view=auto</a><br class="">==============================<wbr class="">==============================<wbr class="">==================<br class="">--- cfe/trunk/test/SemaObjC/non-<wbr class="">trivial-struct-traits.m (added)<br class="">+++ cfe/trunk/test/SemaObjC/non-<wbr class="">trivial-struct-traits.m Tue Mar 27 17:12:08 2018<br class="">@@ -0,0 +1,25 @@<br class="">+// RUN: %clang_cc1 -fsyntax-only -fobjc-arc -verify %s<br class="">+<br class="">+// expected-no-diagnostics<br class="">+<br class="">+struct Trivial {<br class="">+  int x;<br class="">+};<br class="">+<br class="">+struct NonTrivial {<br class="">+  id x;<br class="">+};<br class="">+<br class="">+int trivial_assign[__has_trivial_<wbr class="">assign(struct Trivial) ? 1 : -1];<br class="">+int trivial_move_assign[__has_<wbr class="">trivial_move_assign(struct Trivial) ? 1 : -1];<br class="">+int trivial_copy_constructor[__<wbr class="">has_trivial_copy(struct Trivial) ? 1 : -1];<br class="">+int trivial_move_constructor[__<wbr class="">has_trivial_move_constructor(<wbr class="">struct Trivial) ? 1 : -1];<br class="">+int trivial_constructor[__has_<wbr class="">trivial_constructor(struct Trivial) ? 1 : -1];<br class="">+int trivial_destructor[__has_<wbr class="">trivial_destructor(struct Trivial) ? 1 : -1];<br class="">+<br class="">+int non_trivial_assign[__has_<wbr class="">trivial_assign(struct NonTrivial) ? -1 : 1];<br class="">+int non_trivial_move_assign[__has_<wbr class="">trivial_move_assign(struct NonTrivial) ? -1 : 1];<br class="">+int non_trivial_copy_constructor[_<wbr class="">_has_trivial_copy(struct NonTrivial) ? -1 : 1];<br class="">+int non_trivial_move_constructor[_<wbr class="">_has_trivial_move_constructor(<wbr class="">struct NonTrivial) ? -1 : 1];<br class="">+int non_trivial_constructor[__has_<wbr class="">trivial_constructor(struct NonTrivial) ? -1 : 1];<br class="">+int non_trivial_destructor[__has_<wbr class="">trivial_destructor(struct NonTrivial) ? -1 : 1];<br class=""><br class=""><br class="">______________________________<wbr class="">_________________<br class="">cfe-commits mailing list<br class=""><a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a><br class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/cfe-commits</a><br class=""></blockquote></div><br class=""></div></div></div></blockquote></div><br class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><span class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;">_______________________________________________</span><br class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><span class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;">cfe-commits mailing list</span><br class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><a href="mailto:cfe-commits@lists.llvm.org" class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;">cfe-commits@lists.llvm.org</a><br class="" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a></div></blockquote></div></div></div></blockquote></div></div></blockquote></div></div></div></blockquote></div></div></blockquote></div><br class=""></div></div></div></blockquote></div><br class=""></body></html>