|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r69549 - sandbox/enums/boost/enums
From: vicente.botet_at_[hidden]
Date: 2011-03-04 12:22:34
Author: viboes
Date: 2011-03-04 12:22:30 EST (Fri, 04 Mar 2011)
New Revision: 69549
URL: http://svn.boost.org/trac/boost/changeset/69549
Log:
Enums: temporary Fix for constexpr enum_set
+ Add static_cast to remove warnings
+ Change the condition of enum class comparison inclusion
Text files modified:
sandbox/enums/boost/enums/emulation.hpp | 94 ++++++++++++++++-----------------------
sandbox/enums/boost/enums/enum_set.hpp | 37 ++++++++-------
2 files changed, 59 insertions(+), 72 deletions(-)
Modified: sandbox/enums/boost/enums/emulation.hpp
==============================================================================
--- sandbox/enums/boost/enums/emulation.hpp (original)
+++ sandbox/enums/boost/enums/emulation.hpp 2011-03-04 12:22:30 EST (Fri, 04 Mar 2011)
@@ -25,46 +25,25 @@
#define BOOST_NO_UNDERLYING_TYPE
#define BOOST_ENUMS_USE_CONSTRUCTORS 1
-
-#if 0
- BOOST_PP_IF(CONS, \
- BOOST_ENUMS_DETAIL_CONSTRUCTORS(EC, UT), \
- BOOST_PP_EMPTY \
- )() \
- BOOST_PP_IF(CONV, \
- BOOST_ENUMS_DETAIL_CONVERSIONS(EC, UT), \
- BOOST_PP_EMPTY \
- )() \
-
+#ifndef BOOST_NO_SCOPED_ENUMS
+ #if defined(__GNUC__) && (__GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 5 ) || ( __GNUC__ == 4 && __GNUC_MINOR__ == 5 && __GNUC_PATCHLEVEL__ < 1))
+ #define BOOST_NO_SCOPED_ENUMS_COMPARE
+ #else
+ #endif
+#else
#endif
+
#ifndef BOOST_NO_SCOPED_ENUMS
- #if defined(__GNUC__) && (__GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 5 ))
-
#define BOOST_ENUMS_DETAIL_BINARY_OPERATOR(EC, UT, OP) \
inline bool operator OP(EC lhs, EC rhs) { \
return (boost::enums::underlying_type<EC>::type)(lhs) \
OP \
(boost::enums::underlying_type<EC>::type)(rhs); \
- }
- #if 0
- bool operator OP(boost::enums::enum_type<EC>::type lhs, EC rhs) { \
- return lhs OP \
- (boost::enums::underlying_type<EC>::type)(rhs); \
- } \
- bool operator OP(EC lhs, type rhs) { \
- return (boost::enums::underlying_type<EC>::type)(lhs) OP rhs; \
- }
- #endif
-
- #else
-
- #define BOOST_ENUMS_DETAIL_BINARY_OPERATOR(EC, UT, OP)
+ }
- #endif
-
-#else
+#else // BOOST_NO_SCOPED_ENUMS
#define BOOST_ENUMS_DETAIL_BINARY_OPERATOR(EC, UT, OP) \
friend inline bool operator OP(EC lhs, EC rhs) { \
@@ -75,9 +54,15 @@
} \
friend inline bool operator OP(EC lhs, type rhs) { \
return lhs.get() OP rhs; \
- }
-
-#endif
+ }
+
+#endif // BOOST_NO_SCOPED_ENUMS
+
+#if !defined(BOOST_NO_SCOPED_ENUMS) && ! defined(BOOST_NO_SCOPED_ENUMS_COMPARE)
+
+#define BOOST_ENUMS_DETAIL_COMPARAISON_OPERATORS(EC, UT)
+
+#else // !defined(BOOST_NO_SCOPED_ENUMS) && ! defined(BOOST_NO_SCOPED_ENUMS_COMPARE)
#define BOOST_ENUMS_DETAIL_COMPARAISON_OPERATORS(EC, UT) \
BOOST_ENUMS_DETAIL_BINARY_OPERATOR(EC, UT, ==) \
@@ -87,7 +72,8 @@
BOOST_ENUMS_DETAIL_BINARY_OPERATOR(EC, UT, >) \
BOOST_ENUMS_DETAIL_BINARY_OPERATOR(EC, UT, >=)
-
+#endif // !defined(BOOST_NO_SCOPED_ENUMS) && ! defined(BOOST_NO_SCOPED_ENUMS_COMPARE)
+
#ifndef BOOST_NO_SCOPED_ENUMS
#ifdef BOOST_NO_UNDERLYING_TYPE
@@ -126,10 +112,8 @@
, boost::dummy::type_tag<boost::enums::underlying_type<EC>::type> const& \
) \
{ \
- return (boost::enums::underlying_type<EC>::type)(boost::enums::get_value(v) ); \
- }
-
-
+ return static_cast<boost::enums::underlying_type<EC>::type>(boost::enums::get_value(v) ); \
+ }
#define BOOST_ENUM_CLASS_START(EC, UT) \
enum class EC : UT
@@ -164,8 +148,8 @@
#else // BOOST_NO_SCOPED_ENUMS
#define BOOST_ENUMS_DETAIL_CONSTRUCTORS(EC, UT) \
- EC() : val_(type()) { } \
- EC(type v) : val_(v) { }
+ EC() : val_(static_cast<underlying_type>(type())) { } \
+ EC(type v) : val_(static_cast<underlying_type>(v)) { }
#define BOOST_ENUMS_DETAIL_CONSTRUCTORS_AUX() \
BOOST_ENUMS_DETAIL_CONSTRUCTORS(EC, UT)
@@ -188,7 +172,7 @@
public: \
enum type
- #define BOOST_ENUMS_END_1(EC, UT) \
+ #define BOOST_ENUMS_DETAIL_END_1(EC, UT) \
; \
typedef UT underlying_type; \
private: \
@@ -221,18 +205,18 @@
) \
{ \
return boost::enums::get_value(v); \
- }
-
+ }
+
- #define BOOST_ENUMS_END_2(EC, UT) \
+ #define BOOST_ENUMS_DETAIL_END_2(EC, UT) \
EC& operator =(type rhs) { \
- val_=rhs; \
+ val_=static_cast<underlying_type>(rhs); \
return *this; \
} \
static EC default_value() \
{ \
EC res; \
- res.val_=EC::type(); \
+ res.val_=static_cast<underlying_type>(EC::type()); \
return res; \
} \
static EC convert_to(underlying_type v) \
@@ -244,7 +228,7 @@
static EC convert_to(type v) \
{ \
EC res; \
- res.val_=v; \
+ res.val_=static_cast<underlying_type>(v); \
return res; \
} \
type get() const \
@@ -256,24 +240,24 @@
BOOST_ENUMS_DETAIL_FRIEND_CONVERSIONS(EC, UT)
#define BOOST_ENUM_CLASS_END(EC, UT) \
- BOOST_ENUMS_END_1(EC, UT) \
- BOOST_ENUMS_END_2(EC, UT) \
+ BOOST_ENUMS_DETAIL_END_1(EC, UT) \
+ BOOST_ENUMS_DETAIL_END_2(EC, UT) \
#define BOOST_ENUM_TYPE_END(EC, UT) \
- BOOST_ENUMS_END_1(EC, UT) \
+ BOOST_ENUMS_DETAIL_END_1(EC, UT) \
BOOST_ENUMS_DETAIL_CONVERSIONS(EC, UT) \
- BOOST_ENUMS_END_2(EC, UT) \
+ BOOST_ENUMS_DETAIL_END_2(EC, UT) \
#define BOOST_ENUM_CLASS_CONS_END(EC, UT) \
- BOOST_ENUMS_END_1(EC, UT) \
+ BOOST_ENUMS_DETAIL_END_1(EC, UT) \
BOOST_ENUMS_DETAIL_CONSTRUCTORS(EC, UT) \
- BOOST_ENUMS_END_2(EC, UT) \
+ BOOST_ENUMS_DETAIL_END_2(EC, UT) \
#define BOOST_ENUM_TYPE_CONS_END(EC, UT) \
- BOOST_ENUMS_END_1(EC, UT) \
+ BOOST_ENUMS_DETAIL_END_1(EC, UT) \
BOOST_ENUMS_DETAIL_CONSTRUCTORS(EC, UT) \
BOOST_ENUMS_DETAIL_CONVERSIONS(EC, UT) \
- BOOST_ENUMS_END_2(EC, UT) \
+ BOOST_ENUMS_DETAIL_END_2(EC, UT) \
#endif // BOOST_NO_SCOPED_ENUMS
#endif
Modified: sandbox/enums/boost/enums/enum_set.hpp
==============================================================================
--- sandbox/enums/boost/enums/enum_set.hpp (original)
+++ sandbox/enums/boost/enums/enum_set.hpp 2011-03-04 12:22:30 EST (Fri, 04 Mar 2011)
@@ -30,7 +30,7 @@
namespace boost {
namespace enums {
- template<typename enum_type,
+ template<typename enum_type,
typename traits=enum_traits<enum_type> >
class enum_set
{
@@ -38,7 +38,10 @@
BOOST_CONSTEXPR enum_set()
{
}
- BOOST_CONSTEXPR explicit enum_set(enum_type setting)
+ //~ BOOST_CONSTEXPR
+ // Need to be refactored to be a constexpr
+ //~ error: constexpr constructor does not have empty body
+ explicit enum_set(enum_type setting)
{
set(setting);
}
@@ -64,7 +67,7 @@
: bits(str,n, zero, one)
{}
#endif
-
+
enum_set &operator&=(const enum_set &rhs)
{
bits &= rhs.bits;
@@ -157,7 +160,7 @@
{
return bits.none();
}
- enum_set operator<<(std::size_t pos) const
+ enum_set operator<<(std::size_t pos) const
{
enum_set r = *this;
r <<= pos;
@@ -171,27 +174,27 @@
}
private:
-
+
static std::size_t to_bit(enum_type value)
{
return traits::pos(value);
}
-
+
std::bitset<traits::size> bits;
-
+
public:
-
+
std::bitset<traits::size+1> detail_bits() { return bits; }
};
// enum_set operators:
- template <typename enum_type, typename traits>
+ template <typename enum_type, typename traits>
enum_set<enum_type,traits> operator&(const enum_set<enum_type,traits>& x, const enum_set<enum_type,traits>& y)
{
enum_set<enum_type,traits> r = x;
r &= y;
return r;
- }
+ }
template <typename enum_type, typename traits >
@@ -200,7 +203,7 @@
enum_set<enum_type,traits> r = x;
r |= y;
return r;
- }
+ }
template <typename enum_type, typename traits >
enum_set<enum_type,traits> operator^(const enum_set<enum_type,traits>& x, const enum_set<enum_type,traits>& y)
@@ -208,8 +211,8 @@
enum_set<enum_type,traits> r = x;
r ^= y;
return r;
- }
-
+ }
+
template <class charT, class ch_traits, typename enum_type, typename traits >
std::basic_istream<charT, ch_traits>&
@@ -217,19 +220,19 @@
{
return is >> x.detail_bits();
}
-
+
template <class charT, class ch_traits, typename enum_type, typename traits >
std::basic_ostream<charT, ch_traits>&
- operator<<(std::basic_ostream<charT, ch_traits>& os, const enum_set<enum_type,traits>& x)
+ operator<<(std::basic_ostream<charT, ch_traits>& os, const enum_set<enum_type,traits>& x)
{
return os << x.detail_bits();
}
-
+
} /* namespace enums */
- template <typename enum_type, typename traits >
+ template <typename enum_type, typename traits >
struct hash<enums::enum_set<enum_type,traits> >
: public std::unary_function<enums::enum_set<enum_type,traits>, std::size_t>
{
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk