Make flags unsigned (WIP, C++11 version)
diff --git a/imgui.cpp b/imgui.cpp
index 11d6d82..bb94bdd 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -5822,7 +5822,7 @@
         window->DC.ParentLayoutType = parent_window ? parent_window->DC.LayoutType : ImGuiLayoutType_Vertical;
         window->DC.FocusCounterRegular = window->DC.FocusCounterTabStop = -1;
 
-        window->DC.ItemFlags = parent_window ? parent_window->DC.ItemFlags : (ImGuiItemFlags)ImGuiItemFlags_Default_;
+        window->DC.ItemFlags = parent_window ? parent_window->DC.ItemFlags : ImGuiItemFlags_Default_;
         window->DC.ItemWidth = window->ItemWidthDefault;
         window->DC.TextWrapPos = -1.0f; // disabled
         window->DC.ItemFlagsStack.resize(0);
diff --git a/imgui.h b/imgui.h
index 77a0953..c090ed7 100644
--- a/imgui.h
+++ b/imgui.h
@@ -739,7 +739,7 @@
 //-----------------------------------------------------------------------------
 
 // Flags for ImGui::Begin()
-enum ImGuiWindowFlags_
+enum ImGuiWindowFlags_ : unsigned int
 {
     ImGuiWindowFlags_None                   = 0,
     ImGuiWindowFlags_NoTitleBar             = 1 << 0,   // Disable title-bar
@@ -780,7 +780,7 @@
 };
 
 // Flags for ImGui::InputText()
-enum ImGuiInputTextFlags_
+enum ImGuiInputTextFlags_ : unsigned int
 {
     ImGuiInputTextFlags_None                = 0,
     ImGuiInputTextFlags_CharsDecimal        = 1 << 0,   // Allow 0123456789.+-*/
@@ -808,7 +808,7 @@
 };
 
 // Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*()
-enum ImGuiTreeNodeFlags_
+enum ImGuiTreeNodeFlags_ : unsigned int
 {
     ImGuiTreeNodeFlags_None                 = 0,
     ImGuiTreeNodeFlags_Selected             = 1 << 0,   // Draw as selected
@@ -830,7 +830,7 @@
 };
 
 // Flags for ImGui::Selectable()
-enum ImGuiSelectableFlags_
+enum ImGuiSelectableFlags_ : unsigned int
 {
     ImGuiSelectableFlags_None               = 0,
     ImGuiSelectableFlags_DontClosePopups    = 1 << 0,   // Clicking this don't close parent popup window
@@ -841,7 +841,7 @@
 };
 
 // Flags for ImGui::BeginCombo()
-enum ImGuiComboFlags_
+enum ImGuiComboFlags_ : unsigned int
 {
     ImGuiComboFlags_None                    = 0,
     ImGuiComboFlags_PopupAlignLeft          = 1 << 0,   // Align the popup toward the left by default
@@ -855,7 +855,7 @@
 };
 
 // Flags for ImGui::BeginTabBar()
-enum ImGuiTabBarFlags_
+enum ImGuiTabBarFlags_ : unsigned int
 {
     ImGuiTabBarFlags_None                           = 0,
     ImGuiTabBarFlags_Reorderable                    = 1 << 0,   // Allow manually dragging tabs to re-order them + New tabs are appended at the end of list
@@ -871,7 +871,7 @@
 };
 
 // Flags for ImGui::BeginTabItem()
-enum ImGuiTabItemFlags_
+enum ImGuiTabItemFlags_ : unsigned int
 {
     ImGuiTabItemFlags_None                          = 0,
     ImGuiTabItemFlags_UnsavedDocument               = 1 << 0,   // Append '*' to title without affecting the ID, as a convenience to avoid using the ### operator. Also: tab is selected on closure and closure is deferred by one frame to allow code to undo it without flicker.
@@ -881,7 +881,7 @@
 };
 
 // Flags for ImGui::IsWindowFocused()
-enum ImGuiFocusedFlags_
+enum ImGuiFocusedFlags_ : unsigned int
 {
     ImGuiFocusedFlags_None                          = 0,
     ImGuiFocusedFlags_ChildWindows                  = 1 << 0,   // IsWindowFocused(): Return true if any children of the window is focused
@@ -893,7 +893,7 @@
 // Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered()
 // Note: if you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that. Please read the FAQ!
 // Note: windows with the ImGuiWindowFlags_NoInputs flag are ignored by IsWindowHovered() calls.
-enum ImGuiHoveredFlags_
+enum ImGuiHoveredFlags_ : unsigned int
 {
     ImGuiHoveredFlags_None                          = 0,        // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them.
     ImGuiHoveredFlags_ChildWindows                  = 1 << 0,   // IsWindowHovered() only: Return true if any children of the window is hovered
@@ -909,7 +909,7 @@
 };
 
 // Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload()
-enum ImGuiDragDropFlags_
+enum ImGuiDragDropFlags_ : unsigned int
 {
     ImGuiDragDropFlags_None                         = 0,
     // BeginDragDropSource() flags
@@ -1021,7 +1021,7 @@
 };
 
 // Configuration flags stored in io.ConfigFlags. Set by user/application.
-enum ImGuiConfigFlags_
+enum ImGuiConfigFlags_ : unsigned int
 {
     ImGuiConfigFlags_None                   = 0,
     ImGuiConfigFlags_NavEnableKeyboard      = 1 << 0,   // Master keyboard navigation enable flag. NewFrame() will automatically fill io.NavInputs[] based on io.KeysDown[].
@@ -1037,7 +1037,7 @@
 };
 
 // Back-end capabilities flags stored in io.BackendFlags. Set by imgui_impl_xxx or custom back-end.
-enum ImGuiBackendFlags_
+enum ImGuiBackendFlags_ : unsigned int
 {
     ImGuiBackendFlags_None                  = 0,
     ImGuiBackendFlags_HasGamepad            = 1 << 0,   // Back-end Platform supports gamepad and currently has one connected.
@@ -1144,7 +1144,7 @@
 };
 
 // Flags for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton()
-enum ImGuiColorEditFlags_
+enum ImGuiColorEditFlags_ : unsigned int
 {
     ImGuiColorEditFlags_None            = 0,
     ImGuiColorEditFlags_NoAlpha         = 1 << 1,   //              // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (will only read 3 components from the input pointer).
@@ -1877,7 +1877,7 @@
     IMGUI_API void              SetCurrentChannel(ImDrawList* draw_list, int channel_idx);
 };
 
-enum ImDrawCornerFlags_
+enum ImDrawCornerFlags_ : unsigned int
 {
     ImDrawCornerFlags_None      = 0,
     ImDrawCornerFlags_TopLeft   = 1 << 0, // 0x1
@@ -1891,7 +1891,7 @@
     ImDrawCornerFlags_All       = 0xF     // In your function calls you may use ~0 (= all bits sets) instead of ImDrawCornerFlags_All, as a convenience
 };
 
-enum ImDrawListFlags_
+enum ImDrawListFlags_ : unsigned int
 {
     ImDrawListFlags_None             = 0,
     ImDrawListFlags_AntiAliasedLines = 1 << 0,  // Lines are anti-aliased (*2 the number of triangles for 1.0f wide line, otherwise *3 the number of triangles)
@@ -2095,7 +2095,7 @@
     bool IsPacked() const           { return X != 0xFFFF; }
 };
 
-enum ImFontAtlasFlags_
+enum ImFontAtlasFlags_ : unsigned int
 {
     ImFontAtlasFlags_None               = 0,
     ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0,   // Don't round the height to next power of two
diff --git a/imgui_draw.cpp b/imgui_draw.cpp
index 1c30c7b..62cf269 100644
--- a/imgui_draw.cpp
+++ b/imgui_draw.cpp
@@ -364,7 +364,7 @@
     CmdBuffer.resize(0);
     IdxBuffer.resize(0);
     VtxBuffer.resize(0);
-    Flags = _Data ? _Data->InitialFlags : (ImDrawListFlags)ImDrawListFlags_None;
+    Flags = _Data ? _Data->InitialFlags : ImDrawListFlags_None;
     _VtxCurrentOffset = 0;
     _VtxCurrentIdx = 0;
     _VtxWritePtr = NULL;
diff --git a/imgui_internal.h b/imgui_internal.h
index 20394b6..f3d83bc 100644
--- a/imgui_internal.h
+++ b/imgui_internal.h
@@ -413,7 +413,7 @@
 // Misc data structures
 //-----------------------------------------------------------------------------
 
-enum ImGuiButtonFlags_
+enum ImGuiButtonFlags_ : unsigned int
 {
     ImGuiButtonFlags_None                   = 0,
     ImGuiButtonFlags_Repeat                 = 1 << 0,   // hold to repeat
@@ -435,19 +435,19 @@
     ImGuiButtonFlags_PressedOnMask_         = ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick | ImGuiButtonFlags_PressedOnDragDropHold
 };
 
-enum ImGuiSliderFlags_
+enum ImGuiSliderFlags_ : unsigned int
 {
     ImGuiSliderFlags_None                   = 0,
     ImGuiSliderFlags_Vertical               = 1 << 0
 };
 
-enum ImGuiDragFlags_
+enum ImGuiDragFlags_ : unsigned int
 {
     ImGuiDragFlags_None                     = 0,
     ImGuiDragFlags_Vertical                 = 1 << 0
 };
 
-enum ImGuiColumnsFlags_
+enum ImGuiColumnsFlags_ : unsigned int
 {
     // Default: 0
     ImGuiColumnsFlags_None                  = 0,
@@ -459,7 +459,7 @@
 };
 
 // Extend ImGuiSelectableFlags_
-enum ImGuiSelectableFlagsPrivate_
+enum ImGuiSelectableFlagsPrivate_ : unsigned int
 {
     // NB: need to be in sync with last value of ImGuiSelectableFlags_
     ImGuiSelectableFlags_NoHoldingActiveID  = 1 << 20,
@@ -471,12 +471,12 @@
 };
 
 // Extend ImGuiTreeNodeFlags_
-enum ImGuiTreeNodeFlagsPrivate_
+enum ImGuiTreeNodeFlagsPrivate_ : unsigned int
 {
     ImGuiTreeNodeFlags_ClipLabelForTrailingButton = 1 << 20
 };
 
-enum ImGuiSeparatorFlags_
+enum ImGuiSeparatorFlags_ : unsigned int
 {
     ImGuiSeparatorFlags_None                = 0,
     ImGuiSeparatorFlags_Horizontal          = 1 << 0,   // Axis default to current layout type, so generally Horizontal unless e.g. in a menu bar
@@ -486,7 +486,7 @@
 
 // Transient per-window flags, reset at the beginning of the frame. For child window, inherited from parent on first Begin().
 // This is going to be exposed in imgui.h when stabilized enough.
-enum ImGuiItemFlags_
+enum ImGuiItemFlags_ : unsigned int
 {
     ImGuiItemFlags_None                     = 0,
     ImGuiItemFlags_NoTabStop                = 1 << 0,  // false
@@ -500,7 +500,7 @@
 };
 
 // Storage for LastItem data
-enum ImGuiItemStatusFlags_
+enum ImGuiItemStatusFlags_ : unsigned int
 {
     ImGuiItemStatusFlags_None               = 0,
     ImGuiItemStatusFlags_HoveredRect        = 1 << 0,
@@ -520,7 +520,7 @@
 #endif
 };
 
-enum ImGuiTextFlags_
+enum ImGuiTextFlags_ : unsigned int
 {
     ImGuiTextFlags_None = 0,
     ImGuiTextFlags_NoWidthForLargeClippedText = 1 << 0
@@ -578,7 +578,7 @@
     ImGuiInputReadMode_RepeatFast
 };
 
-enum ImGuiNavHighlightFlags_
+enum ImGuiNavHighlightFlags_ : unsigned int
 {
     ImGuiNavHighlightFlags_None         = 0,
     ImGuiNavHighlightFlags_TypeDefault  = 1 << 0,
@@ -587,7 +587,7 @@
     ImGuiNavHighlightFlags_NoRounding   = 1 << 3
 };
 
-enum ImGuiNavDirSourceFlags_
+enum ImGuiNavDirSourceFlags_ : unsigned int
 {
     ImGuiNavDirSourceFlags_None         = 0,
     ImGuiNavDirSourceFlags_Keyboard     = 1 << 0,
@@ -595,7 +595,7 @@
     ImGuiNavDirSourceFlags_PadLStick    = 1 << 2
 };
 
-enum ImGuiNavMoveFlags_
+enum ImGuiNavMoveFlags_ : unsigned int
 {
     ImGuiNavMoveFlags_None                  = 0,
     ImGuiNavMoveFlags_LoopX                 = 1 << 0,   // On failed request, restart from opposite side
@@ -888,7 +888,7 @@
     void Clear()         { Window = NULL; ID = FocusScopeId = 0; DistBox = DistCenter = DistAxial = FLT_MAX; RectRel = ImRect(); }
 };
 
-enum ImGuiNextWindowDataFlags_
+enum ImGuiNextWindowDataFlags_ : unsigned int
 {
     ImGuiNextWindowDataFlags_None               = 0,
     ImGuiNextWindowDataFlags_HasPos             = 1 << 0,
@@ -922,7 +922,7 @@
     inline void ClearFlags()    { Flags = ImGuiNextWindowDataFlags_None; }
 };
 
-enum ImGuiNextItemDataFlags_
+enum ImGuiNextItemDataFlags_ : unsigned int
 {
     ImGuiNextItemDataFlags_None     = 0,
     ImGuiNextItemDataFlags_HasWidth = 1 << 0,
diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp
index 9faa71c..124594d 100644
--- a/imgui_widgets.cpp
+++ b/imgui_widgets.cpp
@@ -4507,9 +4507,9 @@
 
     // Read stored options
     if (!(flags & ImGuiColorEditFlags__PickerMask))
-        flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__PickerMask) ? g.ColorEditOptions : (ImGuiColorEditFlags)ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__PickerMask;
+        flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__PickerMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__PickerMask;
     if (!(flags & ImGuiColorEditFlags__InputMask))
-        flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__InputMask) ? g.ColorEditOptions : (ImGuiColorEditFlags)ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__InputMask;
+        flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__InputMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__InputMask;
     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask)); // Check that only 1 is selected
     IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));  // Check that only 1 is selected
     if (!(flags & ImGuiColorEditFlags_NoOptions))