Core/Flags: Try some hack to fix compilation
This commit is contained in:
parent
184a970b72
commit
b7df3bd1c4
|
|
@ -55,16 +55,19 @@ namespace Nz
|
||||||
BitField m_value;
|
BitField m_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename E> constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator~(E lhs);
|
// Little hack to have them in both Nz and global scope
|
||||||
template<typename E> constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator|(E lhs, E rhs);
|
namespace DetailFlagOperators
|
||||||
template<typename E> constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator&(E lhs, E rhs);
|
{
|
||||||
template<typename E> constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator^(E lhs, E rhs);
|
template<typename E> constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator~(E lhs);
|
||||||
|
template<typename E> constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator|(E lhs, E rhs);
|
||||||
|
template<typename E> constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator&(E lhs, E rhs);
|
||||||
|
template<typename E> constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator^(E lhs, E rhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
using namespace DetailFlagOperators;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename E> constexpr std::enable_if_t<Nz::EnumAsFlags<E>::value, Nz::Flags<E>> operator~(E lhs);
|
using namespace Nz::DetailFlagOperators;
|
||||||
template<typename E> constexpr std::enable_if_t<Nz::EnumAsFlags<E>::value, Nz::Flags<E>> operator|(E lhs, E rhs);
|
|
||||||
template<typename E> constexpr std::enable_if_t<Nz::EnumAsFlags<E>::value, Nz::Flags<E>> operator&(E lhs, E rhs);
|
|
||||||
template<typename E> constexpr std::enable_if_t<Nz::EnumAsFlags<E>::value, Nz::Flags<E>> operator^(E lhs, E rhs);
|
|
||||||
|
|
||||||
#include <Nazara/Core/Flags.inl>
|
#include <Nazara/Core/Flags.inl>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -211,127 +211,69 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
namespace DetailFlagOperators
|
||||||
* \brief Override binary NOT operator on enum to turns into a Flags object.
|
|
||||||
* \return A Flags object with reversed bits.
|
|
||||||
*
|
|
||||||
* \param lhs Enumeration value to reverse.
|
|
||||||
*
|
|
||||||
* Returns a Flags object with all state enabled except for the enum one.
|
|
||||||
*/
|
|
||||||
template<typename E>
|
|
||||||
constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator~(E lhs)
|
|
||||||
{
|
{
|
||||||
return ~Flags<E>(lhs);
|
/*!
|
||||||
|
* \brief Override binary NOT operator on enum to turns into a Flags object.
|
||||||
|
* \return A Flags object with reversed bits.
|
||||||
|
*
|
||||||
|
* \param lhs Enumeration value to reverse.
|
||||||
|
*
|
||||||
|
* Returns a Flags object with all state enabled except for the enum one.
|
||||||
|
*/
|
||||||
|
template<typename E>
|
||||||
|
constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator~(E lhs)
|
||||||
|
{
|
||||||
|
return ~Flags<E>(lhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Override binary OR operator on enum to turns into a Flags object.
|
||||||
|
* \return A Flags object with combined enum states.
|
||||||
|
*
|
||||||
|
* \param lhs First enumeration value to combine.
|
||||||
|
* \param rhs Second enumeration value to combine.
|
||||||
|
*
|
||||||
|
* Returns a Flags object with combined states from the two enumeration values.
|
||||||
|
*/
|
||||||
|
template<typename E>
|
||||||
|
constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator|(E lhs, E rhs)
|
||||||
|
{
|
||||||
|
return Flags<E>(lhs) | rhs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Override binary AND operator on enum to turns into a Flags object.
|
||||||
|
* \return A Flags object with compare enum states.
|
||||||
|
*
|
||||||
|
* \param lhs First enumeration value to compare.
|
||||||
|
* \param rhs Second enumeration value to compare.
|
||||||
|
*
|
||||||
|
* Returns a Flags object with compared states from the two enumeration values.
|
||||||
|
* In this case, only one flag will be enabled if both enumeration values are the same.
|
||||||
|
*/
|
||||||
|
template<typename E>
|
||||||
|
constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator&(E lhs, E rhs)
|
||||||
|
{
|
||||||
|
return Flags<E>(lhs) & rhs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Override binary XOR operator on enum to turns into a Flags object.
|
||||||
|
* \return A Flags object with XORed enum states.
|
||||||
|
*
|
||||||
|
* \param lhs First enumeration value to compare.
|
||||||
|
* \param rhs Second enumeration value to compare.
|
||||||
|
*
|
||||||
|
* Returns a Flags object with XORed states from the two enumeration values.
|
||||||
|
* In this case, two flags will be enabled if both the enumeration values are different.
|
||||||
|
*/
|
||||||
|
template<typename E>
|
||||||
|
constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator^(E lhs, E rhs)
|
||||||
|
{
|
||||||
|
return Flags<E>(lhs) ^ rhs;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Override binary OR operator on enum to turns into a Flags object.
|
|
||||||
* \return A Flags object with combined enum states.
|
|
||||||
*
|
|
||||||
* \param lhs First enumeration value to combine.
|
|
||||||
* \param rhs Second enumeration value to combine.
|
|
||||||
*
|
|
||||||
* Returns a Flags object with combined states from the two enumeration values.
|
|
||||||
*/
|
|
||||||
template<typename E>
|
|
||||||
constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator|(E lhs, E rhs)
|
|
||||||
{
|
|
||||||
return Flags<E>(lhs) | rhs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Override binary AND operator on enum to turns into a Flags object.
|
|
||||||
* \return A Flags object with compare enum states.
|
|
||||||
*
|
|
||||||
* \param lhs First enumeration value to compare.
|
|
||||||
* \param rhs Second enumeration value to compare.
|
|
||||||
*
|
|
||||||
* Returns a Flags object with compared states from the two enumeration values.
|
|
||||||
* In this case, only one flag will be enabled if both enumeration values are the same.
|
|
||||||
*/
|
|
||||||
template<typename E>
|
|
||||||
constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator&(E lhs, E rhs)
|
|
||||||
{
|
|
||||||
return Flags<E>(lhs) & rhs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Override binary XOR operator on enum to turns into a Flags object.
|
|
||||||
* \return A Flags object with XORed enum states.
|
|
||||||
*
|
|
||||||
* \param lhs First enumeration value to compare.
|
|
||||||
* \param rhs Second enumeration value to compare.
|
|
||||||
*
|
|
||||||
* Returns a Flags object with XORed states from the two enumeration values.
|
|
||||||
* In this case, two flags will be enabled if both the enumeration values are different.
|
|
||||||
*/
|
|
||||||
template<typename E>
|
|
||||||
constexpr std::enable_if_t<EnumAsFlags<E>::value, Flags<E>> operator^(E lhs, E rhs)
|
|
||||||
{
|
|
||||||
return Flags<E>(lhs) ^ rhs;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Override binary NOT operator on enum to turns into a Flags object.
|
|
||||||
* \return A Flags object with reversed bits.
|
|
||||||
*
|
|
||||||
* \param lhs Enumeration value to reverse.
|
|
||||||
*
|
|
||||||
* Returns a Flags object with all state enabled except for the enum one.
|
|
||||||
*/
|
|
||||||
template<typename E>
|
|
||||||
constexpr std::enable_if_t<Nz::EnumAsFlags<E>::value, Nz::Flags<E>> operator~(E lhs)
|
|
||||||
{
|
|
||||||
return ~Nz::Flags<E>(lhs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Override binary OR operator on enum to turns into a Flags object.
|
|
||||||
* \return A Flags object with combined enum states.
|
|
||||||
*
|
|
||||||
* \param lhs First enumeration value to combine.
|
|
||||||
* \param rhs Second enumeration value to combine.
|
|
||||||
*
|
|
||||||
* Returns a Flags object with combined states from the two enumeration values.
|
|
||||||
*/
|
|
||||||
template<typename E>
|
|
||||||
constexpr std::enable_if_t<Nz::EnumAsFlags<E>::value, Nz::Flags<E>> operator|(E lhs, E rhs)
|
|
||||||
{
|
|
||||||
return Nz::Flags<E>(lhs) | rhs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Override binary AND operator on enum to turns into a Flags object.
|
|
||||||
* \return A Flags object with compare enum states.
|
|
||||||
*
|
|
||||||
* \param lhs First enumeration value to compare.
|
|
||||||
* \param rhs Second enumeration value to compare.
|
|
||||||
*
|
|
||||||
* Returns a Flags object with compared states from the two enumeration values.
|
|
||||||
* In this case, only one flag will be enabled if both enumeration values are the same.
|
|
||||||
*/
|
|
||||||
template<typename E>
|
|
||||||
constexpr std::enable_if_t<Nz::EnumAsFlags<E>::value, Nz::Flags<E>> operator&(E lhs, E rhs)
|
|
||||||
{
|
|
||||||
return Nz::Flags<E>(lhs) & rhs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Override binary XOR operator on enum to turns into a Flags object.
|
|
||||||
* \return A Flags object with XORed enum states.
|
|
||||||
*
|
|
||||||
* \param lhs First enumeration value to compare.
|
|
||||||
* \param rhs Second enumeration value to compare.
|
|
||||||
*
|
|
||||||
* Returns a Flags object with XORed states from the two enumeration values.
|
|
||||||
* In this case, two flags will be enabled if both the enumeration values are different.
|
|
||||||
*/
|
|
||||||
template<typename E>
|
|
||||||
constexpr std::enable_if_t<Nz::EnumAsFlags<E>::value, Nz::Flags<E>> operator^(E lhs, E rhs)
|
|
||||||
{
|
|
||||||
return Nz::Flags<E>(lhs) ^ rhs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <Nazara/Core/DebugOff.hpp>
|
#include <Nazara/Core/DebugOff.hpp>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue