Apply [[nodebug]] to typedefs throughout the STL.

When applied to a typedef or alias template, the [[nodebug]] attribute
makes the typedef transparent to the debugger, so instead of seeing
`std::__function::__alloc_func<remove_reference<void(&)()>::type,
allocator<remove_reference<void(&)()>, void()>::_Target` you see
`void(&)()` as the type of the variable in your debugger.

Removing all this SFINAE noise from debug info has huge binary size
wins, in addition to improving the readability.

For now this change is on by default. Users can override it by
specifying -D_LIBCPP_NODEBUG_TYPE=

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@363117 91177308-0d34-0410-b5e6-96231b3b80d8
8 files changed