diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-10-18 17:28:15 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-10-18 17:28:15 +0000 |
commit | 55d7be6c55869b228c3f723d3c4d436868918f8d (patch) | |
tree | 6600abf67124665fde84486837197b6e09618876 /libstdc++-v3/include/std | |
parent | 10f52eb8c9be36343fc9f97e240db9cf8c73a0fa (diff) | |
download | gcc-55d7be6c55869b228c3f723d3c4d436868918f8d.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165649 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/std')
-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 |