Kaydet (Commit) fed145be authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Fix binary ops with two o3tl::type_flags<E>::Wrap params

(the original ones would never have been picked due to how template argument
deduction works)

Change-Id: I5a08c763d721d8e11b5a10af2344a6a24bb0b9b2
Reviewed-on: https://gerrit.libreoffice.org/18583Reviewed-by: 's avatarStephan Bergmann <sbergman@redhat.com>
Tested-by: 's avatarStephan Bergmann <sbergman@redhat.com>
üst 23a0d1ff
......@@ -68,6 +68,9 @@ struct is_typed_flags {
class Wrap {
public:
typedef typename std::underlying_type<E>::type underlying_type;
typedef is_typed_flags Unwrapped;
explicit Wrap(typename std::underlying_type<E>::type value):
value_(value)
{
......@@ -147,14 +150,17 @@ inline typename o3tl::typed_flags<E>::Wrap operator ^(
^ static_cast<typename std::underlying_type<E>::type>(rhs));
}
template<typename E>
inline typename o3tl::typed_flags<E>::Wrap operator ^(
typename o3tl::typed_flags<E>::Wrap lhs,
typename o3tl::typed_flags<E>::Wrap rhs)
template<typename W>
inline typename o3tl::typed_flags<typename W::Unwrapped::Self>::Wrap operator ^(
W lhs, W rhs)
{
return static_cast<typename o3tl::typed_flags<E>::Wrap>(
static_cast<typename std::underlying_type<E>::type>(lhs)
^ static_cast<typename std::underlying_type<E>::type>(rhs));
return static_cast<W>(
static_cast<
typename std::underlying_type<typename W::Unwrapped::Self>::type>(
lhs)
^ static_cast<
typename std::underlying_type<typename W::Unwrapped::Self>::type>(
rhs));
}
template<typename E>
......@@ -194,14 +200,17 @@ inline typename o3tl::typed_flags<E>::Wrap operator &(
& static_cast<typename std::underlying_type<E>::type>(rhs));
}
template<typename E>
inline typename o3tl::typed_flags<E>::Wrap operator &(
typename o3tl::typed_flags<E>::Wrap lhs,
typename o3tl::typed_flags<E>::Wrap rhs)
template<typename W>
inline typename o3tl::typed_flags<typename W::Unwrapped::Self>::Wrap operator &(
W lhs, W rhs)
{
return static_cast<typename o3tl::typed_flags<E>::Wrap>(
static_cast<typename std::underlying_type<E>::type>(lhs)
& static_cast<typename std::underlying_type<E>::type>(rhs));
return static_cast<W>(
static_cast<
typename std::underlying_type<typename W::Unwrapped::Self>::type>(
lhs)
& static_cast<
typename std::underlying_type<typename W::Unwrapped::Self>::type>(
rhs));
}
template<typename E>
......@@ -241,14 +250,17 @@ inline typename o3tl::typed_flags<E>::Wrap operator |(
| static_cast<typename std::underlying_type<E>::type>(rhs));
}
template<typename E>
inline typename o3tl::typed_flags<E>::Wrap operator |(
typename o3tl::typed_flags<E>::Wrap lhs,
typename o3tl::typed_flags<E>::Wrap rhs)
template<typename W>
inline typename o3tl::typed_flags<typename W::Unwrapped::Self>::Wrap operator |(
W lhs, W rhs)
{
return static_cast<typename o3tl::typed_flags<E>::Wrap>(
static_cast<typename std::underlying_type<E>::type>(lhs)
| static_cast<typename std::underlying_type<E>::type>(rhs));
return static_cast<W>(
static_cast<
typename std::underlying_type<typename W::Unwrapped::Self>::type>(
lhs)
| static_cast<
typename std::underlying_type<typename W::Unwrapped::Self>::type>(
rhs));
}
template<typename E>
......
......@@ -47,6 +47,10 @@ public:
nHint &= ConfigurationChangedHint::ONE;
CPPUNIT_ASSERT( bool(nHint &= ConfigurationChangedHint::ONE) );
CPPUNIT_ASSERT(
!((ConfigurationChangedHint::NONE | ConfigurationChangedHint::ONE)
& (ConfigurationChangedHint::NONE
| ConfigurationChangedHint::TWO)));
}
// Change the following lines only, if you add, remove or rename
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment