#include <MinConsole.hpp>
#include <Windows.h>
#include <mutex>

namespace MinConsole
{
void* GetOutputHandle()
{
	static void* Handle = nullptr;
	std::once_flag HandleCached;
	std::call_once(HandleCached, [=]()
		{
			Handle = GetStdHandle(STD_OUTPUT_HANDLE);
		});
	return Handle;
}

void SetTextColor(Color NewColor)
{
	SetConsoleTextAttribute(
		GetOutputHandle(),
		static_cast<std::underlying_type_t<MinConsole::Color>>(NewColor)
	);
}

std::size_t GetWidth()
{
	CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo;
	if( GetConsoleScreenBufferInfo(
		GetOutputHandle(),
		&ConsoleInfo) )
	{
		return static_cast<size_t>(ConsoleInfo.dwSize.X);
	}
	return 0;
}
}

#include <MinConsole.hpp>
#include <Windows.h>

namespace MinConsole
{
void* GetOutputHandle()
{
	static void* Handle = nullptr;

	if( Handle == nullptr )
	{
		Handle = GetStdHandle(STD_OUTPUT_HANDLE);
	}

	return Handle;
}

void SetTextColor(Color NewColor)
{
	SetConsoleTextAttribute(
		GetOutputHandle(),
		static_cast<std::underlying_type_t<MinConsole::Color>>(NewColor)
	);
}

std::size_t GetWidth()
{
	CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo;
	if( GetConsoleScreenBufferInfo(
		GetOutputHandle(),
		&ConsoleInfo) )
	{
		return static_cast<size_t>(ConsoleInfo.dwSize.X);
	}
	return 0;
}
}

--- 
+++ 
@@ -1,17 +1,17 @@
 #include <MinConsole.hpp>
 #include <Windows.h>
+#include <mutex>
 
 namespace MinConsole
 {
 void* GetOutputHandle()
 {
 	static void* Handle = nullptr;
-
-	if( Handle == nullptr )
-	{
-		Handle = GetStdHandle(STD_OUTPUT_HANDLE);
-	}
-
+	std::once_flag HandleCached;
+	std::call_once(HandleCached, [=]()
+		{
+			Handle = GetStdHandle(STD_OUTPUT_HANDLE);
+		});
 	return Handle;
 }
 
Set StdHandle initialization with with call_once
