Fix #340: <functional>: _HAS_STATIC_RTTI=0 shouldn't say typeid(void) (#375)

This calls `abort()` as there's no need to invoke the terminate handler.

(This is a virtual function, so eliminating it entirely would risk ODR
violations leading to crashes. It's much safer to provide a definition
that can't be called.)

Additionally, fix `<xlocale>` to qualify `_CSTD abort()`.
This commit is contained in:
Stephan T. Lavavej 2019-12-11 16:29:43 -08:00 коммит произвёл GitHub
Родитель 2428e4631f
Коммит d0ff26f92e
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 3 добавлений и 3 удалений

Просмотреть файл

@ -866,7 +866,7 @@ private:
#if _HAS_STATIC_RTTI
return typeid(_Callable);
#else // _HAS_STATIC_RTTI
return typeid(void);
_CSTD abort();
#endif // _HAS_STATIC_RTTI
}
@ -930,7 +930,7 @@ private:
#if _HAS_STATIC_RTTI
return typeid(_Callable);
#else // _HAS_STATIC_RTTI
return typeid(void);
_CSTD abort();
#endif // _HAS_STATIC_RTTI
}

Просмотреть файл

@ -438,7 +438,7 @@ const _Facet& __CRTDECL use_facet(const locale& _Loc) { // get facet reference f
#if _HAS_EXCEPTIONS
_Throw_bad_cast(); // lazy disallowed
#else // _HAS_EXCEPTIONS
abort(); // lazy disallowed
_CSTD abort(); // lazy disallowed
#endif // _HAS_EXCEPTIONS
} else { // queue up lazy facet for destruction
auto _Pfmod = const_cast<locale::facet*>(_Psave);