aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2016-10-13 15:42:09 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2016-10-13 15:42:09 +0100
commit0c0d2a4cf0fbad6cb92dcf666b24fde8fac8b104 (patch)
treee1a197ea433d14b95632dbcdf821e6c1c8e8bb6f
parent4d0cdd0ce64e8821ad218054ccd317f195eb3cc8 (diff)
downloadgcc-0c0d2a4cf0fbad6cb92dcf666b24fde8fac8b104.zip
gcc-0c0d2a4cf0fbad6cb92dcf666b24fde8fac8b104.tar.gz
gcc-0c0d2a4cf0fbad6cb92dcf666b24fde8fac8b104.tar.bz2
Replace non-constexpr decrement in std::chrono::floor
* include/std/chrono (floor): Replace non-constexpr operation. * testsuite/20_util/duration_cast/rounding.cc: Test conversion to durations with floating pointer representations. From-SVN: r241122
-rw-r--r--libstdc++-v3/ChangeLog4
-rw-r--r--libstdc++-v3/include/std/chrono2
-rw-r--r--libstdc++-v3/testsuite/20_util/duration_cast/rounding.cc4
3 files changed, 9 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 1dac9ca..5a81534 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,9 @@
2016-10-13 Jonathan Wakely <jwakely@redhat.com>
+ * include/std/chrono (floor): Replace non-constexpr operation.
+ * testsuite/20_util/duration_cast/rounding.cc: Test conversion to
+ durations with floating pointer representations.
+
* src/c++11/compatibility-thread-c++0x.cc (_Bind_simple)
(_Bind_simple_helper, __bind_simple): Restore for ABI compat symbols.
diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono
index cb8c876..ceae7f8 100644
--- a/libstdc++-v3/include/std/chrono
+++ b/libstdc++-v3/include/std/chrono
@@ -224,7 +224,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
{
auto __to = chrono::duration_cast<_ToDur>(__d);
if (__to > __d)
- --__to;
+ return __to - _ToDur{1};
return __to;
}
diff --git a/libstdc++-v3/testsuite/20_util/duration_cast/rounding.cc b/libstdc++-v3/testsuite/20_util/duration_cast/rounding.cc
index a753323..2a1df74 100644
--- a/libstdc++-v3/testsuite/20_util/duration_cast/rounding.cc
+++ b/libstdc++-v3/testsuite/20_util/duration_cast/rounding.cc
@@ -27,6 +27,8 @@
using namespace std::chrono_literals;
using std::chrono::seconds;
+using fp_seconds = std::chrono::duration<float>;
+
static_assert( std::chrono::floor<seconds>(1000ms) == 1s );
static_assert( std::chrono::floor<seconds>(1001ms) == 1s );
static_assert( std::chrono::floor<seconds>(1500ms) == 1s );
@@ -34,6 +36,7 @@ static_assert( std::chrono::floor<seconds>(1999ms) == 1s );
static_assert( std::chrono::floor<seconds>(2000ms) == 2s );
static_assert( std::chrono::floor<seconds>(2001ms) == 2s );
static_assert( std::chrono::floor<seconds>(2500ms) == 2s );
+static_assert( std::chrono::floor<fp_seconds>(500ms) == fp_seconds{0.5f} );
static_assert( std::chrono::ceil<seconds>(1000ms) == 1s );
static_assert( std::chrono::ceil<seconds>(1001ms) == 2s );
@@ -42,6 +45,7 @@ static_assert( std::chrono::ceil<seconds>(1999ms) == 2s );
static_assert( std::chrono::ceil<seconds>(2000ms) == 2s );
static_assert( std::chrono::ceil<seconds>(2001ms) == 3s );
static_assert( std::chrono::ceil<seconds>(2500ms) == 3s );
+static_assert( std::chrono::ceil<fp_seconds>(500ms) == fp_seconds{0.5f} );
static_assert( std::chrono::round<seconds>(1000ms) == 1s );
static_assert( std::chrono::round<seconds>(1001ms) == 1s );