diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2010-10-18 17:28:15 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2010-10-18 17:28:15 +0000 |
commit | e1d4e035faf994e8d8a562ce8e6e3819aa32449d (patch) | |
tree | 6600abf67124665fde84486837197b6e09618876 /libstdc++-v3/include/std/ratio | |
parent | 30fd588162ce3286f388ae2f0e09a7a3637a9a23 (diff) |
re PR libstdc++/45866 ([C++0x] std::ratio_add, ratio_sub, ratio_multiply, ratio_divide do not have num and den members.)
2010-10-18 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/45866
* include/std/ratio (ratio<>::type): Add.
(ratio_add<>::num, ratio_add<>::den,
ratio_subtract<>::num, ratio_subtract<>::den,
ratio_multiply<>::num, ratio_multiply<>::den,
ratio_divide<>::num, ratio_divide<>::den): Likewise.
* testsuite/20_util/ratio/operations/45866.cc: New.
From-SVN: r165649
Diffstat (limited to 'libstdc++-v3/include/std/ratio')
-rw-r--r-- | libstdc++-v3/include/std/ratio | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/libstdc++-v3/include/std/ratio b/libstdc++-v3/include/std/ratio index 74806c41d5a..b999e31a56f 100644 --- a/libstdc++-v3/include/std/ratio +++ b/libstdc++-v3/include/std/ratio @@ -160,6 +160,8 @@ namespace std static const intmax_t den = __static_abs<_Den>::value / __static_gcd<_Num, _Den>::value; + + typedef ratio<num, den> type; }; template<intmax_t _Num, intmax_t _Den> @@ -182,8 +184,17 @@ namespace std __safe_multiply<_R1::num, (_R2::den / __gcd)>::value, __safe_multiply<_R2::num, (_R1::den / __gcd)>::value>::value, __safe_multiply<_R1::den, (_R2::den / __gcd)>::value> type; + + static const intmax_t num = type::num; + static const intmax_t den = type::den; }; + template<typename _R1, typename _R2> + const intmax_t ratio_add<_R1, _R2>::num; + + template<typename _R1, typename _R2> + const intmax_t ratio_add<_R1, _R2>::den; + /// ratio_subtract template<typename _R1, typename _R2> struct ratio_subtract @@ -191,8 +202,17 @@ namespace std typedef typename ratio_add< _R1, ratio<-_R2::num, _R2::den>>::type type; + + static const intmax_t num = type::num; + static const intmax_t den = type::den; }; + template<typename _R1, typename _R2> + const intmax_t ratio_subtract<_R1, _R2>::num; + + template<typename _R1, typename _R2> + const intmax_t ratio_subtract<_R1, _R2>::den; + /// ratio_multiply template<typename _R1, typename _R2> struct ratio_multiply @@ -209,8 +229,17 @@ namespace std (_R2::num / __gcd2)>::value, __safe_multiply<(_R1::den / __gcd2), (_R2::den / __gcd1)>::value> type; + + static const intmax_t num = type::num; + static const intmax_t den = type::den; }; + template<typename _R1, typename _R2> + const intmax_t ratio_multiply<_R1, _R2>::num; + + template<typename _R1, typename _R2> + const intmax_t ratio_multiply<_R1, _R2>::den; + /// ratio_divide template<typename _R1, typename _R2> struct ratio_divide @@ -220,8 +249,17 @@ namespace std typedef typename ratio_multiply< _R1, ratio<_R2::den, _R2::num>>::type type; + + static const intmax_t num = type::num; + static const intmax_t den = type::den; }; + template<typename _R1, typename _R2> + const intmax_t ratio_divide<_R1, _R2>::num; + + template<typename _R1, typename _R2> + const intmax_t ratio_divide<_R1, _R2>::den; + /// ratio_equal template<typename _R1, typename _R2> struct ratio_equal |