template <class T> operator&=(T & a, T b) -> constexpr std::enable_if< is_flag< T >::value, T >::typetemplate <class T> operator^(T a, T b) -> constexpr std::enable_if< is_flag< T >::value, T >::typetemplate <class T> operator&(T a, T b) -> constexpr std::enable_if< is_flag< T >::value, T >::typetemplate <class T> operator^=(T & a, T b) -> constexpr std::enable_if< is_flag< T >::value, T >::typetemplate <class T> operator~(T a) -> constexpr std::enable_if< is_flag< T >::value, T >::typetemplate <class T> operator!(T a) -> constexpr std::enable_if< is_flag< T >::value, bool >::typetemplate <class T> operator|(T a, T b) -> constexpr std::enable_if< is_flag< T >::value, T >::typetemplate <class T> operator|=(T & a, T b) -> constexpr std::enable_if< is_flag< T >::value, T >::type