<div dir="ltr">It seems to me like it may be reasonable to increment the default language version in Clang from -std=gnu++14 to -std=gnu++17 soon.<div><br></div><div>However, one issue is that a <i>lot</i> of code is broken by libc++'s removal of auto_ptr, random_shuffle, bind1st/bind2nd<span style="color:rgb(0,0,0)">, ptr_fun/mem_fun/</span>mem_fun_ref/etc. (And almost nothing is broken by the removal of {set_,get_,}unexpected, but I'm not sure it makes sense to actually treat that differently.)</div><div><br></div><div>Given:</div><div>1. There is a large amount of existing usage of these functions/classes.</div><div>2. GCC has not, and has no plans to, remove them from libstdc++.</div><div>3. We ought to continue incrementing the default C++ language version in clang.</div><div>4. It would be good not to break vast swaths of existing code while doing so.</div><div><br></div><div>I propose that we modify the libc++ configuration to define _LIBCPP_ENABLE_CXX17_REMOVED_FEATURES unless __STRICT_ANSI__ is defined. </div><div><br></div><div>That define is set only if the user explicitly passes --std=c++XX. In the default compilation mode, the removed functionality would continue to be available, and only users who ask for a strict compliance mode would get an error.</div><div><br></div><div>I think that would strike a reasonable balance between not unnecessarily breaking code, and moving things forward.</div><div><br></div><div>Thoughts?</div><div></div></div>