chrono (duration): Use explicitly defaulted ctor, cctor, dtor and assignment.
2008-07-31 Chris Fairles <chris.fairles@gmail.com> * include/std/chrono (duration): Use explicitly defaulted ctor, cctor, dtor and assignment. Add diagnostics as per 20.8.3 paragraphs 2, 3 and 4 in WD. Other minor tweaks. * testsuite/20_util/duration/cons/1_neg.cc: Adjust line numbers. * testsuite/20_util/duration/requirements/typedefs_neg1.cc: New. * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Likewise. * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Likewise. From-SVN: r138434
This commit is contained in:
parent
affa55c67f
commit
9d4e8554de
6 changed files with 187 additions and 30 deletions
|
@ -1,3 +1,13 @@
|
|||
2008-07-31 Chris Fairles <chris.fairles@gmail.com>
|
||||
|
||||
* include/std/chrono (duration): Use explicitly defaulted ctor, cctor,
|
||||
dtor and assignment. Add diagnostics as per 20.8.3 paragraphs 2, 3
|
||||
and 4 in WD. Other minor tweaks.
|
||||
* testsuite/20_util/duration/cons/1_neg.cc: Adjust line numbers.
|
||||
* testsuite/20_util/duration/requirements/typedefs_neg1.cc: New.
|
||||
* testsuite/20_util/duration/requirements/typedefs_neg2.cc: Likewise.
|
||||
* testsuite/20_util/duration/requirements/typedefs_neg3.cc: Likewise.
|
||||
|
||||
2008-07-31 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
* testsuite/lib/libstdc++.exp (libstdc++_init): Set v3-libgomp.
|
||||
|
|
|
@ -166,36 +166,51 @@ namespace std
|
|||
{ return numeric_limits<_Rep>::min(); }
|
||||
};
|
||||
|
||||
template<typename _Tp>
|
||||
struct __is_duration
|
||||
: std::false_type
|
||||
{ };
|
||||
|
||||
template<typename _Rep, typename _Period>
|
||||
struct __is_duration<duration<_Rep, _Period>>
|
||||
: std::true_type
|
||||
{ };
|
||||
|
||||
template<typename T>
|
||||
struct __is_ratio
|
||||
: std::false_type
|
||||
{ };
|
||||
|
||||
template<intmax_t _Num, intmax_t _Den>
|
||||
struct __is_ratio<ratio<_Num, _Den>>
|
||||
: std::true_type
|
||||
{ };
|
||||
|
||||
/// duration
|
||||
template<typename _Rep, typename _Period>
|
||||
struct duration
|
||||
{
|
||||
static_assert(!__is_duration<_Rep>::value, "rep cannot be a duration");
|
||||
static_assert(__is_ratio<_Period>::value,
|
||||
"period must be a specialization of ratio");
|
||||
static_assert(_Period::num > 0, "period must be positive");
|
||||
|
||||
typedef _Rep rep;
|
||||
typedef _Period period;
|
||||
|
||||
// construction / destruction
|
||||
duration ()
|
||||
: __r(rep(0))
|
||||
{ }
|
||||
// 20.8.3.1 construction / copy / destroy
|
||||
duration() = default;
|
||||
|
||||
template<typename _Rep2>
|
||||
explicit duration(_Rep2 const& __rep)
|
||||
: __r(static_cast<rep>(__rep))
|
||||
{
|
||||
static_assert(is_convertible<_Rep2,rep>::value == true
|
||||
&& (treat_as_floating_point<rep>::value == true
|
||||
|| (!treat_as_floating_point<rep>::value
|
||||
&& !treat_as_floating_point<_Rep2>::value)),
|
||||
"cannot construct integral duration with floating point type");
|
||||
static_assert(is_convertible<_Rep2,rep>::value
|
||||
&& (treat_as_floating_point<rep>::value
|
||||
|| !treat_as_floating_point<_Rep2>::value),
|
||||
"cannot construct integral duration with floating point type");
|
||||
}
|
||||
|
||||
duration(const duration& __d)
|
||||
: __r(__d.count())
|
||||
{ }
|
||||
|
||||
// conversions
|
||||
template<typename _Rep2, typename _Period2>
|
||||
duration(const duration<_Rep2, _Period2>& __d)
|
||||
: __r(duration_cast<duration>(__d).count())
|
||||
|
@ -205,12 +220,16 @@ namespace std
|
|||
"the resulting duration is not exactly representable");
|
||||
}
|
||||
|
||||
// observer
|
||||
~duration() = default;
|
||||
duration(const duration&) = default;
|
||||
duration& operator=(const duration&) = default;
|
||||
|
||||
// 20.8.3.2 observer
|
||||
rep
|
||||
count() const
|
||||
{ return __r; }
|
||||
|
||||
// arithmetic
|
||||
// 20.8.3.3 arithmetic
|
||||
duration
|
||||
operator+() const
|
||||
{ return *this; }
|
||||
|
@ -269,7 +288,7 @@ namespace std
|
|||
return *this;
|
||||
}
|
||||
|
||||
// special values
|
||||
// 20.8.3.4 special values
|
||||
// TODO: These should be constexprs.
|
||||
static const duration
|
||||
zero()
|
||||
|
@ -324,22 +343,12 @@ namespace std
|
|||
operator*(const _Rep2& __s, const duration<_Rep1, _Period>& __d)
|
||||
{ return __d * __s; }
|
||||
|
||||
template<typename _Tp>
|
||||
struct __is_not_duration
|
||||
: std::true_type
|
||||
{ };
|
||||
|
||||
template<typename _Rep, typename _Period>
|
||||
struct __is_not_duration<duration<_Rep, _Period>>
|
||||
: std::false_type
|
||||
{ };
|
||||
|
||||
template<typename _Tp, typename _Up, typename _Ep = void>
|
||||
struct __division_impl;
|
||||
|
||||
template<typename _Rep1, typename _Period, typename _Rep2>
|
||||
struct __division_impl<duration<_Rep1, _Period>, _Rep2,
|
||||
typename enable_if<__is_not_duration<_Rep2>::value>::type>
|
||||
typename enable_if<!__is_duration<_Rep2>::value>::type>
|
||||
{
|
||||
typedef typename common_type<_Rep1, _Rep2>::type __cr;
|
||||
typedef
|
||||
|
|
|
@ -41,6 +41,6 @@ test02()
|
|||
|
||||
// { dg-error "instantiated from here" "" { target *-*-* } 30 }
|
||||
// { dg-error "instantiated from here" "" { target *-*-* } 39 }
|
||||
// { dg-error "not exactly representable" "" { target *-*-* } 203 }
|
||||
// { dg-error "integral duration with floating point" "" { target *-*-* } 187 }
|
||||
// { dg-error "not exactly representable" "" { target *-*-* } 218 }
|
||||
// { dg-error "integral duration with floating point" "" { target *-*-* } 208 }
|
||||
// { dg-excess-errors "In instantiation of" }
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
// { dg-do compile }
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
// { dg-require-cstdint "" }
|
||||
// 2008-07-31 Chris Fairles <chris.fairles@gmail.com>
|
||||
|
||||
// Copyright (C) 2008 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 2, 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 COPYING. If not, write to the Free
|
||||
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
// USA.
|
||||
|
||||
// As a special exception, you may use this file as part of a free software
|
||||
// library without restriction. Specifically, if other files instantiate
|
||||
// templates or use macros or inline functions from this file, or you compile
|
||||
// this file and link it with other files to produce an executable, this
|
||||
// file does not by itself cause the resulting executable to be covered by
|
||||
// the GNU General Public License. This exception does not however
|
||||
// invalidate any other reasons why the executable file might be covered by
|
||||
// the GNU General Public License.
|
||||
|
||||
#include <chrono>
|
||||
|
||||
void test01()
|
||||
{
|
||||
// Check if rep is a duration type
|
||||
typedef std::chrono::duration<int> rep_type;
|
||||
typedef std::chrono::duration<rep_type> test_type;
|
||||
test_type d;
|
||||
}
|
||||
|
||||
// { dg-error "rep cannot be a duration" "" { target *-*-* } 193 }
|
||||
// { dg-error "instantiated from here" "" { target *-*-* } 40 }
|
||||
// { dg-excess-errors "In instantiation of" }
|
|
@ -0,0 +1,46 @@
|
|||
// { dg-do compile }
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
// { dg-require-cstdint "" }
|
||||
// 2008-07-31 Chris Fairles <chris.fairles@gmail.com>
|
||||
|
||||
// Copyright (C) 2008 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 2, 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 COPYING. If not, write to the Free
|
||||
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
// USA.
|
||||
|
||||
// As a special exception, you may use this file as part of a free software
|
||||
// library without restriction. Specifically, if other files instantiate
|
||||
// templates or use macros or inline functions from this file, or you compile
|
||||
// this file and link it with other files to produce an executable, this
|
||||
// file does not by itself cause the resulting executable to be covered by
|
||||
// the GNU General Public License. This exception does not however
|
||||
// invalidate any other reasons why the executable file might be covered by
|
||||
// the GNU General Public License.
|
||||
|
||||
#include <chrono>
|
||||
|
||||
void test01()
|
||||
{
|
||||
// Check if period is a ratio
|
||||
typedef int rep_type;
|
||||
typedef int period_type;
|
||||
typedef std::chrono::duration<rep_type, period_type> test_type;
|
||||
test_type d;
|
||||
}
|
||||
|
||||
// { dg-error "must be a specialization of ratio" "" { target *-*-* } 194 }
|
||||
// { dg-error "instantiated from here" "" { target *-*-* } 41 }
|
||||
// { dg-excess-errors "In instantiation of" }
|
|
@ -0,0 +1,47 @@
|
|||
// { dg-do compile }
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
// { dg-require-cstdint "" }
|
||||
// 2008-07-31 Chris Fairles <chris.fairles@gmail.com>
|
||||
|
||||
// Copyright (C) 2008 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 2, 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 COPYING. If not, write to the Free
|
||||
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
// USA.
|
||||
|
||||
// As a special exception, you may use this file as part of a free software
|
||||
// library without restriction. Specifically, if other files instantiate
|
||||
// templates or use macros or inline functions from this file, or you compile
|
||||
// this file and link it with other files to produce an executable, this
|
||||
// file does not by itself cause the resulting executable to be covered by
|
||||
// the GNU General Public License. This exception does not however
|
||||
// invalidate any other reasons why the executable file might be covered by
|
||||
// the GNU General Public License.
|
||||
|
||||
#include <ratio>
|
||||
#include <chrono>
|
||||
|
||||
void test01()
|
||||
{
|
||||
// Check if period is positive
|
||||
typedef int rep_type;
|
||||
typedef std::ratio<-1> period_type;
|
||||
typedef std::chrono::duration<rep_type, period_type> test_type;
|
||||
test_type d;
|
||||
}
|
||||
|
||||
// { dg-error "period must be positive" "" { target *-*-* } 196 }
|
||||
// { dg-error "instantiated from here" "" { target *-*-* } 42 }
|
||||
// { dg-excess-errors "In instantiation of" }
|
Loading…
Add table
Reference in a new issue