<div dir="ltr"><div dir="ltr">On Fri, Oct 4, 2019 at 12:57 PM Barry Revzin via Lib &lt;<a href="mailto:lib@lists.isocpp.org">lib@lists.isocpp.org</a>&gt; wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Oct 4, 2019, 1:51 PM Richard Smith &lt;<a href="mailto:richardsmith@google.com" target="_blank">richardsmith@google.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Fri, Oct 4, 2019 at 6:56 AM David Vandevoorde via Lib &lt;<a href="mailto:lib@lists.isocpp.org" rel="noreferrer" target="_blank">lib@lists.isocpp.org</a>&gt; wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>__cpp_lib_remove_cvref : does this need a macro? It seems like code wishing to support old compilers could define it themselves or unconditionally use remove_reference + remove_cv (I think this fails the &quot;you lose nothing by always behaving like the feature is not present&quot; test, unless I&#39;ve overlooked a use case).<br></div></blockquote></div></div></blockquote></div></div><div dir="auto"><br></div><div dir="auto">I wasn&#39;t sure about the traits. This one seems easily implantable (and the next two), so maybe not.</div></div></blockquote><div><br></div><div>An implementation has access to tools that are not available in C++, and so can implement traits more efficiently than can a user. This:</div><div><br></div><div>namespace stuff {</div><div>#ifdef __cpp_lib_remove_cvref</div><div>using std::remove_cvref_t;</div><div>#else</div><div>// ... implement remove_cvref_t here ...</div><div>#endif</div><div>}</div><div><br></div><div>is more compile-time efficient on MSVC (were we to define __cpp_lib_remove_cvref, that is) than anything you can write for &quot;implement remove_cvref_t here&quot;. Is that sufficient motivation to have feature-test macros even for traits that are easily implemented by hand?</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div>For __cpp_nodiscard_reason: I&#39;m opposed to adding this macro in isolation. Either we need to accept that version numbers for feature test macros don&#39;t work (the magic numbers are too magical) and completely rethink our approach, or we do not have adequate rationale for this.<br></div></div></div></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Understood.</div></div></blockquote><div><br></div><div>So, we&#39;re saying that __cpp_nodiscard_reason must have a reason? :trollface: </div></div></div>