diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2018-08-14 14:55:21 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2018-08-14 14:55:21 +0100 |
commit | b8b5398cbdf99f6c977a6a1749628538ba436a0b (patch) | |
tree | 73ab593a4e17d4e3788e88432c865af86da6a8ef | |
parent | 26e130482e69aef0dbd0bc4c218a82ba7b64bce7 (diff) | |
download | gcc-b8b5398cbdf99f6c977a6a1749628538ba436a0b.zip gcc-b8b5398cbdf99f6c977a6a1749628538ba436a0b.tar.gz gcc-b8b5398cbdf99f6c977a6a1749628538ba436a0b.tar.bz2 |
Simplify overflow checks in duration literals
* include/std/chrono (__check_overflow): Simplify definition.
(_Checked_integral_constant): Remove.
From-SVN: r263537
-rw-r--r-- | libstdc++-v3/ChangeLog | 3 | ||||
-rw-r--r-- | libstdc++-v3/include/std/chrono | 18 |
2 files changed, 7 insertions, 14 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 15ff3db..cf69f21 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,8 @@ 2018-08-14 Jonathan Wakely <jwakely@redhat.com> + * include/std/chrono (__check_overflow): Simplify definition. + (_Checked_integral_constant): Remove. + PR libstdc++/86846 * src/c++17/default_resource.h: New file, defining default_res. * src/c++17/memory_resource.cc [ATOMIC_POINTER_LOCK_FREE != 2] diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono index da03fdc..871c896 100644 --- a/libstdc++-v3/include/std/chrono +++ b/libstdc++-v3/include/std/chrono @@ -900,24 +900,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wliteral-suffix" - template<typename _Rep, unsigned long long _Val> - struct _Checked_integral_constant - : integral_constant<_Rep, static_cast<_Rep>(_Val)> - { - static_assert(_Checked_integral_constant::value >= 0 - && _Checked_integral_constant::value == _Val, - "literal value cannot be represented by duration type"); - }; - template<typename _Dur, char... _Digits> constexpr _Dur __check_overflow() { using _Val = __parse_int::_Parse_int<_Digits...>; - using _Rep = typename _Dur::rep; - // TODO: should be simply integral_constant<_Rep, _Val::value> - // but GCC doesn't reject narrowing conversions to _Rep. - using _CheckedVal = _Checked_integral_constant<_Rep, _Val::value>; - return _Dur{_CheckedVal::value}; + constexpr typename _Dur::rep __repval = _Val::value; + static_assert(__repval >= 0 && __repval == _Val::value, + "literal value cannot be represented by duration type"); + return _Dur(__repval); } constexpr chrono::duration<long double, ratio<3600,1>> |