numeric_cast should work with enum's

Frederick Virchanza Gotham via Boost-users <[email protected]>
Newsgroups gmane.comp.lib.boost.user
Message-ID <CALtZhhNaGK_g9GQj=ZSM_4+h8dtszvsW_BC0SHr6cCd6o1s4hw@mail.gmail.com>
(Sometimes Gmail changes white space so I hope this post is indented
properly)

I think that "numeric_cast" should be able to cast to and from enum types,
so that it can be used as follows:

#include <cstdint>
#include <iostream>

using std::cout;
using std::endl;

enum class Frog { Blue, Yellow, Pink = 0xFFFFu };

enum class Toad : std::uint8_t { Purple, Orange = 0x7f };

int main(void)
{
    try { numeric_cast<Toad>( Frog::Pink ); } catch(std::exception const
&e) { cout << e.what() << endl; }

    std::uint32_t my_32_bit_var = 0xffffffffU;

    try { numeric_cast<std::uint16_t>(my_32_bit_var); }
catch(std::exception const &e) { cout << e.what() << endl; }
    try { numeric_cast<std::uint8_t>( Frog::Pink ); } catch(std::exception
const &e) { cout << e.what() << endl; }
    try { numeric_cast<Toad>(0x1FFu); } catch(std::exception const &e) {
cout << e.what() << endl; }
}



In order to achieve this behaviour, I've created my own "numeric_cast" in
the global namespace as follows:



#include <type_traits> // is_enum, underlying_type
#include <boost/numeric/conversion/cast.hpp> // numeric_cast

template<bool T_is_an_enum, typename T>
struct numeric_cast_helper {
    typedef T type;
};

template<typename T>
struct numeric_cast_helper<true, T> {
    typedef typename std::underlying_type<T>::type type;
};

template<typename A, typename B>
A numeric_cast(B const b)
{
    return
    static_cast<A>(
        boost::numeric_cast<typename
numeric_cast_helper<std::is_enum<A>::value, A>::type>
        (
            static_cast<typename
numeric_cast_helper<std::is_enum<B>::value, B>::type>(b)
        )
    );
}



Should the Boost Numeric library be changed so that numeric_cast can work
with enum's?

_______________________________________________
Boost-users mailing list
[email protected]
https://lists.boost.org/mailman/listinfo.cgi/boost-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.