Finalstate, look at my first post, you can use that. I showed you how to do it.
Also your attempt where you claimed you had compilation errors, works fine on my end, here's the full code:
# include <thread>
# include <mutex>
# include <condition_variable>
# include <vector>
# include <deque>
# include <atomic>
# include <iostream>
# include <functional>
# include <algorithm>
using namespace std;
typedef enum fpl_KeyboardModifierType {
fpl_KeyboardModifierType_None = 0,
fpl_KeyboardModifierType_Alt = 1 << 0,
fpl_KeyboardModifierType_Ctrl = 1 << 1,
fpl_KeyboardModifierType_Shift = 1 << 2,
fpl_KeyboardModifierType_Super = 1 << 3,
} fpl_KeyboardModifierType;
#ifdef __cplusplus
inline fpl_KeyboardModifierType operator |(fpl_KeyboardModifierType a, fpl_KeyboardModifierType b) {
return static_cast<fpl_KeyboardModifierType>(static_cast<int>(a) | static_cast<int>(b));
}
inline fpl_KeyboardModifierType operator &(fpl_KeyboardModifierType a, fpl_KeyboardModifierType b) {
return static_cast<fpl_KeyboardModifierType>(static_cast<int>(a) & static_cast<int>(b));
}
inline fpl_KeyboardModifierType& operator |=(fpl_KeyboardModifierType& a, fpl_KeyboardModifierType b) {
return a = a | b;
}
#endif
void Func(fpl_KeyboardModifierType f) {
if (f & fpl_KeyboardModifierType_Alt) cout << "fpl_KeyboardModifierType_Alt" << endl;
if (f & fpl_KeyboardModifierType_Ctrl) cout << "fpl_KeyboardModifierType_Ctrl" << endl;
if (f & fpl_KeyboardModifierType_Shift) cout << "fpl_KeyboardModifierType_Shift" << endl;
if (f & fpl_KeyboardModifierType_Super) cout << "fpl_KeyboardModifierType_Super" << endl;
}
// ----- main -----
void main() {
Func(fpl_KeyboardModifierType_Shift | fpl_KeyboardModifierType_Super);
// done
std::cout << "done" << std::endl;
getchar();
}
Just copied/paste and threw it together, no changes needed. What you were doing worked fine. Its best to test these things in a smaller 'test unit' alone, and then bring them into the larger project.