Date: Thu, 3 Dec 2020 17:44:45 +0000
Dear all,
Update: I have completed a draft "numeric_cast" proposal for conversion
between all numeric types, with header-only C++11 implementation, and some
background research.
This header-only implementation has less feature than boost::numeric_cast
in round_policy, and handler, but it depends on C++11 compiler only. It
is ready to go without install the whole boost lib.
It supports user-defined numeric types like big integer and half floating
point, etc, if numeric_limits<> are defined.
auto b = is_numeric(a); // this is a compiling time check,
is_numeric<T>::value; // type trait
// throwable runtime numeric cast
TargetType t = numeric_cast<SourceType, TargetType>(SourceType s);
int i = func() ; short s = numeric_cast(i);
float f = func() ; short s = numeric_cast(f);
// if exception is not supported/preferred, then check if before
castbool convertible<TargetType>(SourceType sourceValue) noexcept//
can be named as `is_numeric_convertible()`
https://github.com/qingfengxia/cpp_numeric_cast/blob/master/proposal_numeric_
cast.md
feedbacks are welcomed
Qingfeng Xia
Senior Research Software Engineer, UKAEA
On Sat, 16 May 2020 at 00:08, Qingfeng Xia <qingfeng.xia_at_[hidden]> wrote:
>
> Dear all,
>
> I hope runtime safe `numeric_cast` can be added to standard library header
> <numeric>.
>
> The boost library has already got such feature, I wonder if there is
> already a proposal to merge it into the next standard?
>
> Before I searched and reached Boost::numeric_cast, I reinvented the wheel,
> together with some other helper functions. More technical details are
> written in markdown at:
>
> https://github.com/qingfengxia/cpp_numeric_cast/blob/master/proposal_numeric_cast.md
>
> I have another idea: reuse the `explicit` keyword to prevent implicit
> conversion of function parameter.
> https://github.com/qingfengxia/cpp_numeric_cast/blob/master/proposal_explicit.md
> I am not sure it is the correct maillist to discuss this idea. It proposes
> to change compiler code-base/hehaviors. Please advise, shall I send
> another email somewhere else for this idea?
>
> Demo code and implementation are hosted at:
> https://github.com/qingfengxia/cpp_numeric_cast
>
> Both ideas are at the "Float the idea" stage, all the code and text are
> in early draft condition. They will be update and improve gradually.
>
> Thank you and looking forwards to feedback.
>
> Yours Sincerely,
>
> Qingfeng Xia
>
Update: I have completed a draft "numeric_cast" proposal for conversion
between all numeric types, with header-only C++11 implementation, and some
background research.
This header-only implementation has less feature than boost::numeric_cast
in round_policy, and handler, but it depends on C++11 compiler only. It
is ready to go without install the whole boost lib.
It supports user-defined numeric types like big integer and half floating
point, etc, if numeric_limits<> are defined.
auto b = is_numeric(a); // this is a compiling time check,
is_numeric<T>::value; // type trait
// throwable runtime numeric cast
TargetType t = numeric_cast<SourceType, TargetType>(SourceType s);
int i = func() ; short s = numeric_cast(i);
float f = func() ; short s = numeric_cast(f);
// if exception is not supported/preferred, then check if before
castbool convertible<TargetType>(SourceType sourceValue) noexcept//
can be named as `is_numeric_convertible()`
https://github.com/qingfengxia/cpp_numeric_cast/blob/master/proposal_numeric_
cast.md
feedbacks are welcomed
Qingfeng Xia
Senior Research Software Engineer, UKAEA
On Sat, 16 May 2020 at 00:08, Qingfeng Xia <qingfeng.xia_at_[hidden]> wrote:
>
> Dear all,
>
> I hope runtime safe `numeric_cast` can be added to standard library header
> <numeric>.
>
> The boost library has already got such feature, I wonder if there is
> already a proposal to merge it into the next standard?
>
> Before I searched and reached Boost::numeric_cast, I reinvented the wheel,
> together with some other helper functions. More technical details are
> written in markdown at:
>
> https://github.com/qingfengxia/cpp_numeric_cast/blob/master/proposal_numeric_cast.md
>
> I have another idea: reuse the `explicit` keyword to prevent implicit
> conversion of function parameter.
> https://github.com/qingfengxia/cpp_numeric_cast/blob/master/proposal_explicit.md
> I am not sure it is the correct maillist to discuss this idea. It proposes
> to change compiler code-base/hehaviors. Please advise, shall I send
> another email somewhere else for this idea?
>
> Demo code and implementation are hosted at:
> https://github.com/qingfengxia/cpp_numeric_cast
>
> Both ideas are at the "Float the idea" stage, all the code and text are
> in early draft condition. They will be update and improve gradually.
>
> Thank you and looking forwards to feedback.
>
> Yours Sincerely,
>
> Qingfeng Xia
>
Received on 2020-12-03 11:45:00