re PR libstdc++/58850 (Conversion error in chrono)

2013-10-23  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/58850
	* include/std/chrono (minutes, hours): Change typedefs to uniformly
	use int64_t.
	* testsuite/20_util/duration/arithmetic/58850.cc: New.

From-SVN: r203978
This commit is contained in:
Paolo Carlini 2013-10-23 15:31:26 +00:00 committed by Paolo Carlini
parent 021b04102b
commit 66caf47a50
3 changed files with 55 additions and 6 deletions

View File

@ -1,3 +1,10 @@
2013-10-23 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/58850
* include/std/chrono (minutes, hours): Change typedefs to uniformly
use int64_t.
* testsuite/20_util/duration/arithmetic/58850.cc: New.
2013-10-23 Paolo Carlini <paolo.carlini@oracle.com>
* testsuite/decimal/pr58815.cc: Fix thinko.

View File

@ -524,22 +524,22 @@ _GLIBCXX_END_NAMESPACE_VERSION
{ return !(__lhs < __rhs); }
/// nanoseconds
typedef duration<int64_t, nano> nanoseconds;
typedef duration<int64_t, nano> nanoseconds;
/// microseconds
typedef duration<int64_t, micro> microseconds;
typedef duration<int64_t, micro> microseconds;
/// milliseconds
typedef duration<int64_t, milli> milliseconds;
typedef duration<int64_t, milli> milliseconds;
/// seconds
typedef duration<int64_t> seconds;
typedef duration<int64_t> seconds;
/// minutes
typedef duration<int, ratio< 60>> minutes;
typedef duration<int64_t, ratio< 60>> minutes;
/// hours
typedef duration<int, ratio<3600>> hours;
typedef duration<int64_t, ratio<3600>> hours;
/// time_point
template<typename _Clock, typename _Dur>

View File

@ -0,0 +1,42 @@
// { dg-options "-std=gnu++11" }
// { dg-require-cstdint "" }
// Copyright (C) 2013 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
#include <chrono>
#include <testsuite_hooks.h>
void test01()
{
bool test __attribute__((unused)) = true;
using namespace std::chrono;
typedef duration<std::int64_t, std::ratio<36 * 24 * 36525>> Years;
Years galactic_empire_age( 12067 );
VERIFY( duration_cast<seconds>( galactic_empire_age ).count()
== duration_cast<minutes>( galactic_empire_age ).count() * 60 );
VERIFY( duration_cast<minutes>( galactic_empire_age ).count()
== duration_cast<seconds>( galactic_empire_age ).count() / 60 );
}
int main()
{
test01();
return 0;
}