Replaced std::min/std::max with basisu::min/basisu::max

Removed use of NOMINMAX
diff --git a/basisu_tool.cpp b/basisu_tool.cpp
index f9b6ea3..c233746 100644
--- a/basisu_tool.cpp
+++ b/basisu_tool.cpp
@@ -258,7 +258,7 @@
 		m_compare_ssim(false),
 		m_bench(false)
 	{
-		m_comp_params.m_compression_level = std::max<int>(0, BASISU_DEFAULT_COMPRESSION_LEVEL - 1);
+		m_comp_params.m_compression_level = basisu::max<int>(0, BASISU_DEFAULT_COMPRESSION_LEVEL - 1);
 	}
 
 	bool parse(int arg_c, const char **arg_v)
@@ -961,13 +961,13 @@
 
 				for (size_t slice_index = 0; slice_index < c.get_stats().size(); slice_index++)
 				{
-					rgb_avg_psnr_min = std::min(rgb_avg_psnr_min, c.get_stats()[slice_index].m_basis_rgb_avg_psnr);
+					rgb_avg_psnr_min = basisu::min(rgb_avg_psnr_min, c.get_stats()[slice_index].m_basis_rgb_avg_psnr);
 					rgb_avg_psnr_avg += c.get_stats()[slice_index].m_basis_rgb_avg_psnr;
 
-					a_avg_psnr_min = std::min(a_avg_psnr_min, c.get_stats()[slice_index].m_basis_a_avg_psnr);
+					a_avg_psnr_min = basisu::min(a_avg_psnr_min, c.get_stats()[slice_index].m_basis_a_avg_psnr);
 					a_avg_psnr_avg += c.get_stats()[slice_index].m_basis_a_avg_psnr;
 
-					luma_709_psnr_min = std::min(luma_709_psnr_min, c.get_stats()[slice_index].m_basis_luma_709_psnr);
+					luma_709_psnr_min = basisu::min(luma_709_psnr_min, c.get_stats()[slice_index].m_basis_luma_709_psnr);
 					luma_709_psnr_avg += c.get_stats()[slice_index].m_basis_luma_709_psnr;
 				}
 
@@ -1582,8 +1582,8 @@
 		{
 			for (uint32_t level_index = 0; level_index < fileinfo.m_image_mipmap_levels[image_index]; level_index++)
 			{
-				max_mipmap_levels = std::max(max_mipmap_levels, fileinfo.m_image_mipmap_levels[image_index]);
-					 
+				max_mipmap_levels = basisu::max(max_mipmap_levels, fileinfo.m_image_mipmap_levels[image_index]);
+
 				const basist::transcoder_texture_format transcoder_tex_fmt = basist::transcoder_texture_format::cTFRGBA4444;
 
 				basist::basisu_image_level_info level_info;
@@ -2015,7 +2015,7 @@
 
 			for (uint32_t bx = 0; bx < num_blocks_x; bx += N)
 			{
-				const uint32_t num_blocks_to_process = std::min<uint32_t>(num_blocks_x - bx, N);
+				const uint32_t num_blocks_to_process = basisu::min<uint32_t>(num_blocks_x - bx, N);
 
 				color_rgba pixels[16 * N];
 
@@ -2636,186 +2636,186 @@
 		// UASTC
 		em.calc(img, uastc_img, 0, 3);
 		em.print("UASTC RGB  ");
-		total_uastc_psnr += std::min(99.0f, em.m_psnr);
+		total_uastc_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, uastc_img, 3, 1);
 		em.print("UASTC A    ");
 		if (img_has_alpha)
-			total_uastc_a_psnr += std::min(99.0f, em.m_psnr);
+			total_uastc_a_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, uastc_img, 0, 4);
 		em.print("UASTC RGBA ");
-		total_uastc_rgba_psnr += std::min(99.0f, em.m_psnr);
+		total_uastc_rgba_psnr += basisu::min(99.0f, em.m_psnr);
 
 		// RDO UASTC
 		em.calc(img, rdo_uastc_img, 0, 3);
 		em.print("RDOUASTC RGB ");
-		total_rdo_uastc_psnr += std::min(99.0f, em.m_psnr);
+		total_rdo_uastc_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, rdo_uastc_img, 3, 1);
 		em.print("RDOUASTC A ");
 		if (img_has_alpha)
-			total_rdo_uastc_a_psnr += std::min(99.0f, em.m_psnr);
+			total_rdo_uastc_a_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, rdo_uastc_img, 0, 4);
 		em.print("RDOUASTC RGBA ");
-		total_rdo_uastc_rgba_psnr += std::min(99.0f, em.m_psnr);
+		total_rdo_uastc_rgba_psnr += basisu::min(99.0f, em.m_psnr);
 
 		// UASTC2 
 		em.calc(img, uastc2_img, 0, 3);
 		em.print("UASTC2 RGB ");
-		total_uastc2_psnr += std::min(99.0f, em.m_psnr);
+		total_uastc2_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, uastc2_img, 3, 1);
 		em.print("UASTC2 A   ");
 		if (img_has_alpha)
-			total_uastc2_a_psnr += std::min(99.0f, em.m_psnr);
+			total_uastc2_a_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, uastc2_img, 0, 4);
 		em.print("UASTC2 RGBA ");
-		total_uastc2_rgba_psnr += std::min(99.0f, em.m_psnr);
+		total_uastc2_rgba_psnr += basisu::min(99.0f, em.m_psnr);
 
 		// BC7
 		em.calc(img, bc7_img, 0, 3);
 		em.print("BC7 RGB    ");
-		total_bc7_psnr += std::min(99.0f, em.m_psnr);
+		total_bc7_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, bc7_img, 3, 1);
 		em.print("BC7 A      ");
 		if (img_has_alpha)
-			total_bc7_a_psnr += std::min(99.0f, em.m_psnr);
+			total_bc7_a_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, bc7_img, 0, 4);
 		em.print("BC7 RGBA   ");
-		total_bc7_rgba_psnr += std::min(99.0f, em.m_psnr);
+		total_bc7_rgba_psnr += basisu::min(99.0f, em.m_psnr);
 
 		// RDO BC7
 		em.calc(img, rdo_bc7_img, 0, 3);
 		em.print("RDOBC7 RGB ");
-		total_rdo_bc7_psnr += std::min(99.0f, em.m_psnr);
+		total_rdo_bc7_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, rdo_bc7_img, 3, 1);
 		em.print("RDOBC7 A   ");
 		if (img_has_alpha)
-			total_rdo_bc7_a_psnr += std::min(99.0f, em.m_psnr);
+			total_rdo_bc7_a_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, rdo_bc7_img, 0, 4);
 		em.print("RDOBC7 RGBA ");
-		total_rdo_bc7_rgba_psnr += std::min(99.0f, em.m_psnr);
+		total_rdo_bc7_rgba_psnr += basisu::min(99.0f, em.m_psnr);
 
 #if 0
 		// OBC7
 		em.calc(img, opt_bc7_img, 0, 3);
 		em.print("OBC7 RGB   ");
-		total_obc7_psnr += std::min(99.0f, em.m_psnr);
+		total_obc7_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, opt_bc7_img, 3, 1);
 		em.print("OBC7 A     ");
 		if (img_has_alpha)
-			total_obc7_a_psnr += std::min(99.0f, em.m_psnr);
+			total_obc7_a_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, opt_bc7_img, 0, 4);
 		em.print("OBC7 RGBA  ");
-		total_obc7_rgba_psnr += std::min(99.0f, em.m_psnr);
+		total_obc7_rgba_psnr += basisu::min(99.0f, em.m_psnr);
 
 		// OASTC
 		em.calc(img, opt_astc_img, 0, 3);
 		em.print("OASTC RGB   ");
-		total_oastc_psnr += std::min(99.0f, em.m_psnr);
+		total_oastc_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, opt_astc_img, 3, 1);
 		em.print("OASTC A     ");
 		if (img_has_alpha)
-			total_oastc_a_psnr += std::min(99.0f, em.m_psnr);
+			total_oastc_a_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, opt_astc_img, 0, 4);
 		em.print("OASTC RGBA  ");
-		total_oastc_rgba_psnr += std::min(99.0f, em.m_psnr);
+		total_oastc_rgba_psnr += basisu::min(99.0f, em.m_psnr);
 #endif
 
 		// bc7enc
 		em.calc(img, bc7enc_img, 0, 3);
 		em.print("BC7ENC RGB  ");
-		total_bc7enc_psnr += std::min(99.0f, em.m_psnr);
+		total_bc7enc_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, bc7enc_img, 3, 1);
 		em.print("BC7ENC A    ");
 		if (img_has_alpha)
-			total_bc7enc_a_psnr += std::min(99.0f, em.m_psnr);
+			total_bc7enc_a_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, bc7enc_img, 0, 4);
 		em.print("BC7ENC RGBA ");
-		total_bc7enc_rgba_psnr += std::min(99.0f, em.m_psnr);
+		total_bc7enc_rgba_psnr += basisu::min(99.0f, em.m_psnr);
 
 #if 1
 		// OBC1
 		em.calc(img, opt_bc1_img, 0, 3);
 		em.print("OBC1 RGB   ");
-		total_obc1_psnr += std::min(99.0f, em.m_psnr);
-		total_obc1_psnr_sq += std::min(99.0f, em.m_psnr) * std::min(99.0f, em.m_psnr);
+		total_obc1_psnr += basisu::min(99.0f, em.m_psnr);
+		total_obc1_psnr_sq += basisu::min(99.0f, em.m_psnr) * basisu::min(99.0f, em.m_psnr);
 #endif
 				
 		em.calc(img, opt_bc1_2_img, 0, 3);
 		em.print("OBC1 2 RGB ");
-		total_obc1_2_psnr += std::min(99.0f, em.m_psnr);
-		total_obc1_2_psnr_sq += std::min(99.0f, em.m_psnr) * std::min(99.0f, em.m_psnr);
+		total_obc1_2_psnr += basisu::min(99.0f, em.m_psnr);
+		total_obc1_2_psnr_sq += basisu::min(99.0f, em.m_psnr) * basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, bc1_img, 0, 3);
 		em.print("BC1 RGB    ");
-		total_bc1_psnr += std::min(99.0f, em.m_psnr);
-		total_bc1_psnr_sq += std::min(99.0f, em.m_psnr) * std::min(99.0f, em.m_psnr);
+		total_bc1_psnr += basisu::min(99.0f, em.m_psnr);
+		total_bc1_psnr_sq += basisu::min(99.0f, em.m_psnr) * basisu::min(99.0f, em.m_psnr);
 
 		// ETC1
 		em.calc(img, etc1_img, 0, 3);
 		em.print("ETC1 RGB   ");
-		total_etc1_psnr += std::min(99.0f, em.m_psnr);
+		total_etc1_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, etc1_img, 0, 0);
 		em.print("ETC1 Y     ");
-		total_etc1_y_psnr += std::min(99.0f, em.m_psnr);
+		total_etc1_y_psnr += basisu::min(99.0f, em.m_psnr);
 
 		// ETC1
 		em.calc(img, etc1_g_img, 1, 1);
 		em.print("ETC1 G     ");
-		total_etc1_g_psnr += std::min(99.0f, em.m_psnr);
+		total_etc1_g_psnr += basisu::min(99.0f, em.m_psnr);
 
 		// ETC2
 		em.calc(img, etc2_img, 0, 3);
 		em.print("ETC2 RGB   ");
-		total_etc2_psnr += std::min(99.0f, em.m_psnr);
+		total_etc2_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, etc2_img, 3, 1);
 		em.print("ETC2 A     ");
 		if (img_has_alpha)
-			total_etc2_a_psnr += std::min(99.0f, em.m_psnr);
+			total_etc2_a_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, etc2_img, 0, 4);
 		em.print("ETC2 RGBA  ");
-		total_etc2_rgba_psnr += std::min(99.0f, em.m_psnr);
+		total_etc2_rgba_psnr += basisu::min(99.0f, em.m_psnr);
 
 		// BC3
 		em.calc(img, bc3_img, 0, 3);
 		em.print("BC3 RGB    ");
-		total_bc3_psnr += std::min(99.0f, em.m_psnr);
+		total_bc3_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, bc3_img, 3, 1);
 		em.print("BC3 A      ");
 		if (img_has_alpha)
-			total_bc3_a_psnr += std::min(99.0f, em.m_psnr);
+			total_bc3_a_psnr += basisu::min(99.0f, em.m_psnr);
 
 		em.calc(img, bc3_img, 0, 4);
 		em.print("BC3 RGBA   ");
-		total_bc3_rgba_psnr += std::min(99.0f, em.m_psnr);
+		total_bc3_rgba_psnr += basisu::min(99.0f, em.m_psnr);
 
 		// EAC R11
 		em.calc(img, eac_r11_img, 0, 1);
 		em.print("EAC R11    ");
-		total_eac_r11_psnr += std::min(99.0f, em.m_psnr);
+		total_eac_r11_psnr += basisu::min(99.0f, em.m_psnr);
 
 		// EAC RG11
 		em.calc(img, eac_rg11_img, 0, 2);
 		em.print("EAC RG11   ");
-		total_eac_rg11_psnr += std::min(99.0f, em.m_psnr);
+		total_eac_rg11_psnr += basisu::min(99.0f, em.m_psnr);
 
 		const uint32_t width = num_blocks_x * 4;
 		const uint32_t height = num_blocks_y * 4;
@@ -2863,15 +2863,15 @@
 
 			em.calc(img, pi_unpacked, 0, 3);
 			em.print("PVRTC1 After RGB  ");
-			total_pvrtc1_rgb_psnr += std::min(99.0f, em.m_psnr);
+			total_pvrtc1_rgb_psnr += basisu::min(99.0f, em.m_psnr);
 
 			em.calc(img, pi_unpacked, 3, 1);
 			em.print("PVRTC1 After A    ");
-			total_pvrtc1_a_psnr += std::min(99.0f, em.m_psnr);
+			total_pvrtc1_a_psnr += basisu::min(99.0f, em.m_psnr);
 
 			em.calc(img, pi_unpacked, 0, 4);
 			em.print("PVRTC1 After RGBA ");
-			total_pvrtc1_rgba_psnr += std::min(99.0f, em.m_psnr);
+			total_pvrtc1_rgba_psnr += basisu::min(99.0f, em.m_psnr);
 
 			total_pvrtc1_images++;
 		}
@@ -2925,11 +2925,11 @@
 	//printf("Avg Opt ASTC RGB PSNR: %f, A PSNR: %f, RGBA PSNR: %f\n", total_oastc_psnr / total_images, total_oastc_a_psnr / total_a_images, total_oastc_rgba_psnr / total_images);
 	printf("Avg BC7ENC RGB PSNR:   %f, A PSNR: %f, RGBA PSNR: %f\n", total_bc7enc_psnr / total_images, total_bc7enc_a_psnr / total_a_images, total_bc7enc_rgba_psnr / total_images);
 
-	printf("Avg Opt BC1 PSNR: %f, std dev: %f\n", total_obc1_psnr / total_images, sqrtf(std::max(0.0f, (total_obc1_psnr_sq / total_images) - (total_obc1_psnr / total_images) * (total_obc1_psnr / total_images))));
-		
-	printf("Avg Opt BC1 2 PSNR: %f, std dev: %f\n", total_obc1_2_psnr / total_images, sqrtf(std::max(0.0f, (total_obc1_2_psnr_sq / total_images) - (total_obc1_2_psnr / total_images) * (total_obc1_2_psnr / total_images))));
+	printf("Avg Opt BC1 PSNR: %f, std dev: %f\n", total_obc1_psnr / total_images, sqrtf(basisu::max(0.0f, (total_obc1_psnr_sq / total_images) - (total_obc1_psnr / total_images) * (total_obc1_psnr / total_images))));
 
-	printf("Avg BC1 PSNR: %f, std dev: %f\n", total_bc1_psnr / total_images, sqrtf(std::max(0.0f, (total_bc1_psnr_sq / total_images) - (total_bc1_psnr / total_images) * (total_bc1_psnr / total_images))));
+	printf("Avg Opt BC1 2 PSNR: %f, std dev: %f\n", total_obc1_2_psnr / total_images, sqrtf(basisu::max(0.0f, (total_obc1_2_psnr_sq / total_images) - (total_obc1_2_psnr / total_images) * (total_obc1_2_psnr / total_images))));
+
+	printf("Avg BC1 PSNR: %f, std dev: %f\n", total_bc1_psnr / total_images, sqrtf(basisu::max(0.0f, (total_bc1_psnr_sq / total_images) - (total_bc1_psnr / total_images) * (total_bc1_psnr / total_images))));
 
 	printf("Avg ETC1 RGB PSNR: %f\n", total_etc1_psnr / total_images);
 	printf("Avg ETC1 Y PSNR: %f\n", total_etc1_y_psnr / total_images);
diff --git a/encoder/basisu_astc_decomp.cpp b/encoder/basisu_astc_decomp.cpp
index 22e52b4..aa941b9 100644
--- a/encoder/basisu_astc_decomp.cpp
+++ b/encoder/basisu_astc_decomp.cpp
@@ -157,7 +157,7 @@
 
 		UVec4 asUint() const
 		{
-			return UVec4(std::max(0, m_c[0]), std::max(0, m_c[1]), std::max(0, m_c[2]), std::max(0, m_c[3]));
+			return UVec4(basisu::max(0, m_c[0]), basisu::max(0, m_c[1]), basisu::max(0, m_c[2]), basisu::max(0, m_c[3]));
 		}
 
 		int32_t operator[] (uint32_t idx) const { assert(idx < 4);  return m_c[idx]; }
diff --git a/encoder/basisu_comp.cpp b/encoder/basisu_comp.cpp
index b4ee077..0df4521 100644
--- a/encoder/basisu_comp.cpp
+++ b/encoder/basisu_comp.cpp
@@ -267,7 +267,7 @@
 								
 				bool status = uastc_rdo(tex.get_total_blocks(), (basist::uastc_block*)tex.get_ptr(),
 					(const color_rgba *)m_source_blocks[slice_desc.m_first_block_index].m_pixels, rdo_params, m_params.m_pack_uastc_flags, m_params.m_rdo_uastc_multithreading ? m_params.m_pJob_pool : nullptr,
-					(m_params.m_rdo_uastc_multithreading && m_params.m_pJob_pool) ? std::min<uint32_t>(4, (uint32_t)m_params.m_pJob_pool->get_total_threads()) : 0);
+					(m_params.m_rdo_uastc_multithreading && m_params.m_pJob_pool) ? basisu::min<uint32_t>(4, (uint32_t)m_params.m_pJob_pool->get_total_threads()) : 0);
 				if (!status)
 				{
 					return cECFailedUASTCRDOPostProcess;
@@ -489,8 +489,8 @@
 
 			if (m_params.m_resample_factor > 0.0f)
 			{
-				int new_width = std::min<int>(std::max(1, (int)ceilf(file_image.get_width() * m_params.m_resample_factor)), BASISU_MAX_SUPPORTED_TEXTURE_DIMENSION);
-				int new_height = std::min<int>(std::max(1, (int)ceilf(file_image.get_height() * m_params.m_resample_factor)), BASISU_MAX_SUPPORTED_TEXTURE_DIMENSION);
+				int new_width = basisu::min<int>(basisu::max(1, (int)ceilf(file_image.get_width() * m_params.m_resample_factor)), BASISU_MAX_SUPPORTED_TEXTURE_DIMENSION);
+				int new_height = basisu::min<int>(basisu::max(1, (int)ceilf(file_image.get_height() * m_params.m_resample_factor)), BASISU_MAX_SUPPORTED_TEXTURE_DIMENSION);
 
 				debug_printf("Resampling to %ix%i\n", new_width, new_height);
 
diff --git a/encoder/basisu_enc.cpp b/encoder/basisu_enc.cpp
index d046888..e795653 100644
--- a/encoder/basisu_enc.cpp
+++ b/encoder/basisu_enc.cpp
@@ -26,7 +26,6 @@
 #if defined(_WIN32)
 // For QueryPerformanceCounter/QueryPerformanceFrequency
 #define WIN32_LEAN_AND_MEAN
-#define NOMINMAX
 #include <windows.h>
 #endif
 
@@ -1308,10 +1307,10 @@
 	void image_metrics::calc(const image &a, const image &b, uint32_t first_chan, uint32_t total_chans, bool avg_comp_error, bool use_601_luma)
 	{
 		assert((first_chan < 4U) && (first_chan + total_chans <= 4U));
-						
-		const uint32_t width = std::min(a.get_width(), b.get_width());
-		const uint32_t height = std::min(a.get_height(), b.get_height());
-						
+
+		const uint32_t width = basisu::min(a.get_width(), b.get_width());
+		const uint32_t height = basisu::min(a.get_height(), b.get_height());
+
 		double hist[256];
 		clear_obj(hist);
 
@@ -1342,7 +1341,7 @@
 		{
 			if (hist[i])
 			{
-				m_max = std::max<float>(m_max, (float)i);
+				m_max = basisu::max<float>(m_max, (float)i);
 				double v = i * hist[i];
 				sum += v;
 				sum2 += i * v;
@@ -1824,7 +1823,7 @@
 						}
 					}
 
-					const uint32_t n = std::min<uint32_t>(pixels_remaining, run_remaining);
+					const uint32_t n = basisu::min<uint32_t>(pixels_remaining, run_remaining);
 					pixels_remaining -= n;
 					run_remaining -= n;
 
diff --git a/encoder/basisu_enc.h b/encoder/basisu_enc.h
index aadc861..142425b 100644
--- a/encoder/basisu_enc.h
+++ b/encoder/basisu_enc.h
@@ -194,8 +194,8 @@
 				m_new_s = m_old_s + (x - m_old_m) * (x - m_new_m);
 				m_old_m = m_new_m;
 				m_old_s = m_new_s;
-				m_min = std::min(x, m_min);
-				m_max = std::max(x, m_max);
+				m_min = basisu::min(x, m_min);
+				m_max = basisu::max(x, m_max);
 			}
 		}
 		uint32_t get_num() const
@@ -741,8 +741,8 @@
 			return basist::color32(r, g, b, a);
 		}
 
-		static color_rgba comp_min(const color_rgba& a, const color_rgba& b) { return color_rgba(std::min(a[0], b[0]), std::min(a[1], b[1]), std::min(a[2], b[2]), std::min(a[3], b[3])); }
-		static color_rgba comp_max(const color_rgba& a, const color_rgba& b) { return color_rgba(std::max(a[0], b[0]), std::max(a[1], b[1]), std::max(a[2], b[2]), std::max(a[3], b[3])); }
+		static color_rgba comp_min(const color_rgba& a, const color_rgba& b) { return color_rgba(basisu::min(a[0], b[0]), basisu::min(a[1], b[1]), basisu::min(a[2], b[2]), basisu::min(a[3], b[3])); }
+		static color_rgba comp_max(const color_rgba& a, const color_rgba& b) { return color_rgba(basisu::max(a[0], b[0]), basisu::max(a[1], b[1]), basisu::max(a[2], b[2]), basisu::max(a[3], b[3])); }
 	};
 
 	typedef basisu::vector<color_rgba> color_rgba_vec;
diff --git a/encoder/basisu_etc.cpp b/encoder/basisu_etc.cpp
index 34cca98..b488731 100644
--- a/encoder/basisu_etc.cpp
+++ b/encoder/basisu_etc.cpp
@@ -1006,13 +1006,13 @@
 		{
 			const color_rgba& c = m_pParams->m_pSrc_pixels[i];
 
-			min_r = std::min<int>(min_r, c.r);
-			min_g = std::min<int>(min_g, c.g);
-			min_b = std::min<int>(min_b, c.b);
+			min_r = basisu::min<int>(min_r, c.r);
+			min_g = basisu::min<int>(min_g, c.g);
+			min_b = basisu::min<int>(min_b, c.b);
 
-			max_r = std::max<int>(max_r, c.r);
-			max_g = std::max<int>(max_g, c.g);
-			max_b = std::max<int>(max_b, c.b);
+			max_r = basisu::max<int>(max_r, c.r);
+			max_g = basisu::max<int>(max_g, c.g);
+			max_b = basisu::max<int>(max_b, c.b);
 
 			const vec3F fc(c.r, c.g, c.b);
 
@@ -1023,8 +1023,8 @@
 		}
 		avg_color /= static_cast<float>(n);
 		m_avg_color = avg_color;
-		m_max_comp_spread = std::max(std::max(max_r - min_r, max_g - min_g), max_b - min_b);
-		
+		m_max_comp_spread = basisu::max(basisu::max(max_r - min_r, max_g - min_g), max_b - min_b);
+
 		m_br = clamp<int>(static_cast<uint32_t>(m_avg_color[0] * m_limit / 255.0f + .5f), 0, m_limit);
 		m_bg = clamp<int>(static_cast<uint32_t>(m_avg_color[1] * m_limit / 255.0f + .5f), 0, m_limit);
 		m_bb = clamp<int>(static_cast<uint32_t>(m_avg_color[2] * m_limit / 255.0f + .5f), 0, m_limit);
diff --git a/encoder/basisu_gpu_texture.cpp b/encoder/basisu_gpu_texture.cpp
index 5ed2c0e..83c444b 100644
--- a/encoder/basisu_gpu_texture.cpp
+++ b/encoder/basisu_gpu_texture.cpp
@@ -399,7 +399,7 @@
 
 		if (mode)
 		{
-			c[1].set(std::max(0, c[0].r - (c[3].r >> 2)), std::max(0, c[0].g - (c[3].g >> 2)), std::max(0, c[0].b - (c[3].b >> 2)), 255);
+			c[1].set(basisu::max(0, c[0].r - (c[3].r >> 2)), basisu::max(0, c[0].g - (c[3].g >> 2)), basisu::max(0, c[0].b - (c[3].b >> 2)), 255);
 			c[2] = c[0];
 			c[0].set(0, 0, 0, 255);
 		}
diff --git a/encoder/basisu_kernels_declares.h b/encoder/basisu_kernels_declares.h
index 2872604..e24bdd7 100644
--- a/encoder/basisu_kernels_declares.h
+++ b/encoder/basisu_kernels_declares.h
@@ -22,4 +22,4 @@
 
 void CPPSPMD_NAME(find_lowest_error_perceptual_rgb_4_N)(int64_t* pDistance, const basisu::color_rgba* pBlock_colors, const basisu::color_rgba* pSrc_pixels, uint32_t n, int64_t early_out_error);
 void CPPSPMD_NAME(find_lowest_error_linear_rgb_4_N)(int64_t* pDistance, const basisu::color_rgba* pBlock_colors, const basisu::color_rgba* pSrc_pixels, uint32_t n, int64_t early_out_error);
-#endif
\ No newline at end of file
+#endif
diff --git a/encoder/basisu_pvrtc1_4.cpp b/encoder/basisu_pvrtc1_4.cpp
index 83c2052..f3e4ce4 100644
--- a/encoder/basisu_pvrtc1_4.cpp
+++ b/encoder/basisu_pvrtc1_4.cpp
@@ -529,7 +529,7 @@
 
 		uint64_t e03_err_1 = remap_pixels_influenced_by_endpoint(bx, by, orig_img, perceptual, false);
 
-		if (initial_error < std::min(e03_err_0, e03_err_1))
+		if (initial_error < basisu::min(e03_err_0, e03_err_1))
 		{
 			for (int y = -1; y <= 1; y++)
 			{
diff --git a/encoder/basisu_uastc_enc.cpp b/encoder/basisu_uastc_enc.cpp
index 5dc7ea8..a412cf5 100644
--- a/encoder/basisu_uastc_enc.cpp
+++ b/encoder/basisu_uastc_enc.cpp
@@ -1630,7 +1630,7 @@
 		else if (estimate_partition_list_size > 0)
 		{
 			assert(estimate_partition_list_size <= MAX_PARTS);
-			estimate_partition_list_size = std::min(estimate_partition_list_size, MAX_PARTS);
+			estimate_partition_list_size = basisu::min(estimate_partition_list_size, MAX_PARTS);
 
 			estimate_partition2_list(4, 4, g_bc7_weights2, (const color_rgba(*)[4])pBlock, parts, estimate_partition_list_size, weights);
 
@@ -2817,13 +2817,13 @@
 						avg_color[1] += p.g;
 						avg_color[2] += p.b;
 
-						min_r[subset] = std::min<uint32_t>(min_r[subset], p.r);
-						min_g[subset] = std::min<uint32_t>(min_g[subset], p.g);
-						min_b[subset] = std::min<uint32_t>(min_b[subset], p.b);
-						
-						max_r[subset] = std::max<uint32_t>(max_r[subset], p.r);
-						max_g[subset] = std::max<uint32_t>(max_g[subset], p.g);
-						max_b[subset] = std::max<uint32_t>(max_b[subset], p.b);
+						min_r[subset] = basisu::min<uint32_t>(min_r[subset], p.r);
+						min_g[subset] = basisu::min<uint32_t>(min_g[subset], p.g);
+						min_b[subset] = basisu::min<uint32_t>(min_b[subset], p.b);
+
+						max_r[subset] = basisu::max<uint32_t>(max_r[subset], p.r);
+						max_g[subset] = basisu::max<uint32_t>(max_g[subset], p.g);
+						max_b[subset] = basisu::max<uint32_t>(max_b[subset], p.b);
 					} // j
 
 					unbiased_block_colors[subset][0] = (uint8_t)((avg_color[0] * mul + 1020) / (8 * 255));
@@ -3769,7 +3769,7 @@
 			dist_cost += g_tdefl_small_dist_extra[dist & 511];
 		else
 		{
-			dist_cost += g_tdefl_large_dist_extra[std::min<uint32_t>(dist, 32767) >> 8];
+			dist_cost += g_tdefl_large_dist_extra[basisu::min<uint32_t>(dist, 32767) >> 8];
 			while (dist >= 32768)
 			{
 				dist_cost++;
@@ -3839,7 +3839,7 @@
 	{
 		debug_printf("uastc_rdo_blocks: Processing blocks %u to %u\n", first_index, last_index);
 
-		const int total_blocks_to_check = std::max<uint32_t>(1U, params.m_lz_dict_size / sizeof(basist::uastc_block));
+		const int total_blocks_to_check = basisu::max<uint32_t>(1U, params.m_lz_dict_size / sizeof(basist::uastc_block));
 		const bool perceptual = false;
 
 		std::unordered_map<selector_bitsequence, uint32_t, selector_bitsequence_hash> selector_history;
@@ -3867,8 +3867,8 @@
 				a_stats.update(pPixels[i].a);
 			}
 
-			const float max_std_dev = std::max<float>(std::max<float>(std::max(r_stats.get_std_dev(), g_stats.get_std_dev()), b_stats.get_std_dev()), a_stats.get_std_dev());
-									
+			const float max_std_dev = basisu::max<float>(basisu::max<float>(basisu::max(r_stats.get_std_dev(), g_stats.get_std_dev()), b_stats.get_std_dev()), a_stats.get_std_dev());
+
 			float yl = clamp<float>(max_std_dev / params.m_max_smooth_block_std_dev, 0.0f, 1.0f);
 			yl = yl * yl;
 			const float smooth_block_error_scale = lerp<float>(params.m_smooth_block_max_error_scale, 1.0f, yl);
@@ -3910,8 +3910,8 @@
 			assert(total_sel_bits > 0);
 
 			uint32_t cur_bit_offset = first_sel_bit;
-			uint64_t cur_sel_bits = read_bits((const uint8_t*)&blk, cur_bit_offset, std::min(64U, total_sel_bits));
-									
+			uint64_t cur_sel_bits = read_bits((const uint8_t*)&blk, cur_bit_offset, basisu::min(64U, total_sel_bits));
+
 			if (cur_rms_err >= params.m_skip_block_rms_thresh)
 			{
 				auto cur_search_res = selector_history.insert(std::make_pair(selector_bitsequence(first_sel_bit, cur_sel_bits), block_index));
@@ -3940,7 +3940,7 @@
 				cur_bits = compute_match_cost_estimate(block_dist_in_bytes);
 			}
 
-			int first_block_to_check = std::max<int>(first_index, block_index - total_blocks_to_check);
+			int first_block_to_check = basisu::max<int>(first_index, block_index - total_blocks_to_check);
 			int last_block_to_check = block_index - 1;
 
 			basist::uastc_block best_block(blk);
@@ -3955,7 +3955,7 @@
 				const basist::uastc_block& prev_blk = pBlocks[prev_block_index];
 
 				uint32_t bit_offset = first_sel_bit;
-				uint64_t sel_bits = read_bits((const uint8_t*)&prev_blk, bit_offset, std::min(64U, total_sel_bits));
+				uint64_t sel_bits = read_bits((const uint8_t*)&prev_blk, bit_offset, basisu::min(64U, total_sel_bits));
 
 				int match_block_index = prev_block_index;
 				auto res = selector_history.find(selector_bitsequence(first_sel_bit, sel_bits));
@@ -3971,13 +3971,13 @@
 
 				basist::uastc_block trial_blk(blk);
 
-				set_block_bits((uint8_t*)&trial_blk, sel_bits, std::min(64U, total_sel_bits), first_sel_bit);
+				set_block_bits((uint8_t*)&trial_blk, sel_bits, basisu::min(64U, total_sel_bits), first_sel_bit);
 
 				if (total_sel_bits > 64)
 				{
 					sel_bits = read_bits((const uint8_t*)&prev_blk, bit_offset, total_sel_bits - 64U);
 
-					set_block_bits((uint8_t*)&trial_blk, sel_bits, total_sel_bits - 64U, first_sel_bit + std::min(64U, total_sel_bits));
+					set_block_bits((uint8_t*)&trial_blk, sel_bits, total_sel_bits - 64U, first_sel_bit + basisu::min(64U, total_sel_bits));
 				}
 
 				unpacked_uastc_block unpacked_trial_blk;
@@ -4102,7 +4102,7 @@
 
 			{
 				uint32_t bit_offset = first_sel_bit;
-				uint64_t sel_bits = read_bits((const uint8_t*)&best_block, bit_offset, std::min(64U, total_sel_bits));
+				uint64_t sel_bits = read_bits((const uint8_t*)&best_block, bit_offset, basisu::min(64U, total_sel_bits));
 
 				auto res = selector_history.insert(std::make_pair(selector_bitsequence(first_sel_bit, sel_bits), block_index));
 				if (!res.second)
diff --git a/transcoder/basisu.h b/transcoder/basisu.h
index 9d8dfa6..5e82e4c 100644
--- a/transcoder/basisu.h
+++ b/transcoder/basisu.h
@@ -41,10 +41,6 @@
 			#endif
 		#endif // defined(_DEBUG) || defined(DEBUG)
 
-		#ifndef NOMINMAX
-			#define NOMINMAX
-		#endif
-
 	#endif // BASISU_NO_ITERATOR_DEBUG_LEVEL
 
 #endif // _MSC_VER
@@ -122,6 +118,9 @@
 		
 	template <typename T> inline void clear_obj(T& obj) { memset(&obj, 0, sizeof(obj)); }
 
+	template<class T> const T& min(const T& a, const T& b) { return (b < a) ? b : a; }
+	template<class T> const T& max(const T& a, const T& b) { return (a < b) ? b : a; }
+
 	template <typename T0, typename T1> inline T0 lerp(T0 a, T0 b, T1 c) { return a + (b - a) * c; }
 
 	template <typename S> inline S maximum(S a, S b) { return (a > b) ? a : b; }
diff --git a/transcoder/basisu_containers.h b/transcoder/basisu_containers.h
index 9a31766..14a02e8 100644
--- a/transcoder/basisu_containers.h
+++ b/transcoder/basisu_containers.h
@@ -26,6 +26,8 @@
    {
       inline bool is_power_of_2(uint32_t x) { return x && ((x & (x - 1U)) == 0U); }
       inline bool is_power_of_2(uint64_t x) { return x && ((x & (x - 1U)) == 0U); }
+      template<class T> const T& minimum(const T& a, const T& b) { return (b < a) ? b : a; }
+      template<class T> const T& maximum(const T& a, const T& b) { return (a < b) ? b : a; }
 
       inline uint32_t floor_log2i(uint32_t v)
       {
@@ -408,7 +410,7 @@
             // Must work around the lack of a "decrease_capacity()" method.
             // This case is rare enough in practice that it's probably not worth implementing an optimized in-place resize.
             vector tmp;
-            tmp.increase_capacity(std::max(m_size, new_capacity), false);
+            tmp.increase_capacity(helpers::maximum(m_size, new_capacity), false);
             tmp = *this;
             swap(tmp);
          }
@@ -735,7 +737,7 @@
 
       inline bool operator< (const vector& rhs) const
       {
-         const uint32_t min_size = std::min(m_size, rhs.m_size);
+         const uint32_t min_size = helpers::minimum(m_size, rhs.m_size);
 
          const T* pSrc = m_p;
          const T* pSrc_end = m_p + min_size;
@@ -1188,16 +1190,16 @@
 
       inline void reserve(uint32_t new_capacity)
       {
-         uint64_t new_hash_size = std::max(1U, new_capacity);
+         uint64_t new_hash_size = helpers::maximum(1U, new_capacity);
 
          new_hash_size = new_hash_size * 2ULL;
 
          if (!helpers::is_power_of_2(new_hash_size))
             new_hash_size = helpers::next_pow2(new_hash_size);
 
-         new_hash_size = std::max<uint64_t>(cMinHashSize, new_hash_size);
+         new_hash_size = helpers::maximum<uint64_t>(cMinHashSize, new_hash_size);
 
-         new_hash_size = std::min<uint64_t>(0x80000000UL, new_hash_size);
+         new_hash_size = helpers::minimum<uint64_t>(0x80000000UL, new_hash_size);
 
          if (new_hash_size > m_values.size())
             rehash((uint32_t)new_hash_size);
@@ -1646,7 +1648,7 @@
          if (n > 0x80000000UL)
             n = 0x80000000UL;
 
-         rehash(std::max<uint32_t>(cMinHashSize, (uint32_t)n));
+         rehash(helpers::maximum<uint32_t>(cMinHashSize, (uint32_t)n));
       }
 
       inline void rehash(uint32_t new_hash_size)
@@ -1877,4 +1879,4 @@
       a.swap(b);
    }
 
-} // namespace std
\ No newline at end of file
+} // namespace std
diff --git a/transcoder/basisu_transcoder.cpp b/transcoder/basisu_transcoder.cpp
index a0e0b74..a7d3e76 100644
--- a/transcoder/basisu_transcoder.cpp
+++ b/transcoder/basisu_transcoder.cpp
@@ -5082,7 +5082,7 @@
 
 		while (total_bits)
 		{
-			const uint32_t bits_to_write = std::min<int>(total_bits, 8 - (bit_pos & 7));
+			const uint32_t bits_to_write = basisu::min<int>(total_bits, 8 - (bit_pos & 7));
 
 			pBytes[bit_pos >> 3] |= static_cast<uint8_t>(value << (bit_pos & 7));
 
@@ -11893,7 +11893,7 @@
 			{
 				uint8_t vals[5] = { 0, 0, 0, 0, 0 };
 
-				const int limit = std::min(group_size, num_vals - group_index * group_size);
+				const int limit = basisu::min(group_size, num_vals - group_index * group_size);
 				for (int i = 0; i < limit; i++)
 					vals[i] = pSrc_vals[group_index * group_size + i];
 
@@ -12480,7 +12480,7 @@
 			
 			// Read the weight bits
 			if ((BASISD_IS_BIG_ENDIAN) || (!BASISD_USE_UNALIGNED_WORD_READS))
-				bits = read_bits64(blk.m_bytes, bit_ofs, std::min<int>(64, 128 - (int)bit_ofs));
+				bits = read_bits64(blk.m_bytes, bit_ofs, basisu::min<int>(64, 128 - (int)bit_ofs));
 			else
 			{
 #ifdef __EMSCRIPTEN__
@@ -12649,7 +12649,7 @@
 		color32 endpoints[3][2];
 
 		const uint32_t total_subsets = g_uastc_mode_subsets[mode];
-		const uint32_t total_comps = std::min<uint32_t>(4U, g_uastc_mode_comps[mode]);
+		const uint32_t total_comps = basisu::min<uint32_t>(4U, g_uastc_mode_comps[mode]);
 		const uint32_t endpoint_range = g_uastc_mode_endpoint_ranges[mode];
 		const uint32_t total_planes = g_uastc_mode_planes[mode];
 		const uint32_t weight_bits = g_uastc_mode_weight_bits[mode];
@@ -13845,7 +13845,7 @@
 						uint32_t sels[4] = { 0,0,0,0 };
 
 						const uint32_t N = 4;
-						for (uint32_t i = 0; i < std::min<uint32_t>(N, (256 - c)); i++)
+						for (uint32_t i = 0; i < basisu::min<uint32_t>(N, (256 - c)); i++)
 						{
 							uint32_t best_sel_e = UINT32_MAX;
 							uint32_t best_sel = 0;
@@ -13925,7 +13925,7 @@
 						uint32_t sels[4] = { 0,0,0,0 };
 
 						const uint32_t N = 1;
-						for (uint32_t i = 0; i < std::min<uint32_t>(N, (256 - c)); i++)
+						for (uint32_t i = 0; i < basisu::min<uint32_t>(N, (256 - c)); i++)
 						{
 							uint32_t best_sel_e = UINT32_MAX;
 							uint32_t best_sel = 0;
@@ -14029,8 +14029,8 @@
 				for (uint32_t x = 0; x < 4; x++)
 				{
 					const uint32_t v = block_y[y][x];
-					low[0] = std::min(low[0], v);
-					high[0] = std::max(high[0], v);
+					low[0] = basisu::min(low[0], v);
+					high[0] = basisu::max(high[0], v);
 				}
 			}
 			for (uint32_t y = 2; y < 4; y++)
@@ -14038,8 +14038,8 @@
 				for (uint32_t x = 0; x < 4; x++)
 				{
 					const uint32_t v = block_y[y][x];
-					low[1] = std::min(low[1], v);
-					high[1] = std::max(high[1], v);
+					low[1] = basisu::min(low[1], v);
+					high[1] = basisu::max(high[1], v);
 				}
 			}
 		}
@@ -14050,8 +14050,8 @@
 				for (uint32_t x = 0; x < 2; x++)
 				{
 					const uint32_t v = block_y[y][x];
-					low[0] = std::min(low[0], v);
-					high[0] = std::max(high[0], v);
+					low[0] = basisu::min(low[0], v);
+					high[0] = basisu::max(high[0], v);
 				}
 			}
 			for (uint32_t y = 0; y < 4; y++)
@@ -14059,8 +14059,8 @@
 				for (uint32_t x = 2; x < 4; x++)
 				{
 					const uint32_t v = block_y[y][x];
-					low[1] = std::min(low[1], v);
-					high[1] = std::max(high[1], v);
+					low[1] = basisu::min(low[1], v);
+					high[1] = basisu::max(high[1], v);
 				}
 			}
 		}
@@ -14320,10 +14320,10 @@
 				if ((inten_table_mask & (1 << inten)) == 0)
 					continue;
 
-				const int t0 = std::max(low_limit, g_etc1_inten_tables[inten][0]);
-				const int t1 = std::max(low_limit, g_etc1_inten_tables[inten][1]);
-				const int t2 = std::min(high_limit, g_etc1_inten_tables[inten][2]);
-				const int t3 = std::min(high_limit, g_etc1_inten_tables[inten][3]);
+				const int t0 = basisu::max(low_limit, g_etc1_inten_tables[inten][0]);
+				const int t1 = basisu::max(low_limit, g_etc1_inten_tables[inten][1]);
+				const int t2 = basisu::min(high_limit, g_etc1_inten_tables[inten][2]);
+				const int t3 = basisu::min(high_limit, g_etc1_inten_tables[inten][3]);
 				assert((t0 <= t1) && (t1 <= t2) && (t2 <= t3));
 
 				const int tv[4] = { t2, t3, t1, t0 };
@@ -14541,8 +14541,8 @@
 		uint32_t min_a = 255, max_a = 0;
 		for (uint32_t i = 0; i < 16; i++)
 		{
-			min_a = std::min<uint32_t>(min_a, pSrc_pixels[i].a);
-			max_a = std::max<uint32_t>(max_a, pSrc_pixels[i].a);
+			min_a = basisu::min<uint32_t>(min_a, pSrc_pixels[i].a);
+			max_a = basisu::max<uint32_t>(max_a, pSrc_pixels[i].a);
 		}
 
 		if (min_a == max_a)
@@ -14640,24 +14640,24 @@
 		}
 
 		{
-			uint32_t v0 = pPixels[4 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0);
-			uint32_t v1 = pPixels[5 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1);
-			uint32_t v2 = pPixels[6 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2);
-			uint32_t v3 = pPixels[7 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3);
+			uint32_t v0 = pPixels[4 * stride]; min0_v = basisu::min(min0_v, v0); max0_v = basisu::max(max0_v, v0);
+			uint32_t v1 = pPixels[5 * stride]; min1_v = basisu::min(min1_v, v1); max1_v = basisu::max(max1_v, v1);
+			uint32_t v2 = pPixels[6 * stride]; min2_v = basisu::min(min2_v, v2); max2_v = basisu::max(max2_v, v2);
+			uint32_t v3 = pPixels[7 * stride]; min3_v = basisu::min(min3_v, v3); max3_v = basisu::max(max3_v, v3);
 		}
 
 		{
-			uint32_t v0 = pPixels[8 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0);
-			uint32_t v1 = pPixels[9 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1);
-			uint32_t v2 = pPixels[10 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2);
-			uint32_t v3 = pPixels[11 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3);
+			uint32_t v0 = pPixels[8 * stride]; min0_v = basisu::min(min0_v, v0); max0_v = basisu::max(max0_v, v0);
+			uint32_t v1 = pPixels[9 * stride]; min1_v = basisu::min(min1_v, v1); max1_v = basisu::max(max1_v, v1);
+			uint32_t v2 = pPixels[10 * stride]; min2_v = basisu::min(min2_v, v2); max2_v = basisu::max(max2_v, v2);
+			uint32_t v3 = pPixels[11 * stride]; min3_v = basisu::min(min3_v, v3); max3_v = basisu::max(max3_v, v3);
 		}
 
 		{
-			uint32_t v0 = pPixels[12 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0);
-			uint32_t v1 = pPixels[13 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1);
-			uint32_t v2 = pPixels[14 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2);
-			uint32_t v3 = pPixels[15 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3);
+			uint32_t v0 = pPixels[12 * stride]; min0_v = basisu::min(min0_v, v0); max0_v = basisu::max(max0_v, v0);
+			uint32_t v1 = pPixels[13 * stride]; min1_v = basisu::min(min1_v, v1); max1_v = basisu::max(max1_v, v1);
+			uint32_t v2 = pPixels[14 * stride]; min2_v = basisu::min(min2_v, v2); max2_v = basisu::max(max2_v, v2);
+			uint32_t v3 = pPixels[15 * stride]; min3_v = basisu::min(min3_v, v3); max3_v = basisu::max(max3_v, v3);
 		}
 
 		const uint32_t min_v = basisu::minimum(min0_v, min1_v, min2_v, min3_v);
@@ -14982,8 +14982,8 @@
 			for (uint32_t i = 1; i < 16; i++)
 			{
 				const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b;
-				max_r = std::max(max_r, r); max_g = std::max(max_g, g); max_b = std::max(max_b, b);
-				min_r = std::min(min_r, r); min_g = std::min(min_g, g); min_b = std::min(min_b, b);
+				max_r = basisu::max(max_r, r); max_g = basisu::max(max_g, g); max_b = basisu::max(max_b, b);
+				min_r = basisu::min(min_r, r); min_g = basisu::min(min_g, g); min_b = basisu::min(min_b, b);
 				total_r += r; total_g += g; total_b += b;
 			}
 
@@ -15214,8 +15214,8 @@
 			{
 				const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b;
 				grayscale_flag &= ((r == g) && (r == b));
-				max_r = std::max(max_r, r); max_g = std::max(max_g, g); max_b = std::max(max_b, b);
-				min_r = std::min(min_r, r); min_g = std::min(min_g, g); min_b = std::min(min_b, b);
+				max_r = basisu::max(max_r, r); max_g = basisu::max(max_g, g); max_b = basisu::max(max_b, b);
+				min_r = basisu::min(min_r, r); min_g = basisu::min(min_g, g); min_b = basisu::min(min_b, b);
 				total_r += r; total_g += g; total_b += b;
 			}
 						
@@ -15252,25 +15252,25 @@
 
 				uint32_t min_d0 = (dist[0][0] + dist[1][0] + dist[2][0]);
 				uint32_t d4 = (dist[0][0] + dist[1][0] + dist[2][1]) | 4;
-				min_d0 = std::min(min_d0, d4);
+				min_d0 = basisu::min(min_d0, d4);
 
 				uint32_t min_d1 = (dist[0][1] + dist[1][0] + dist[2][0]) | 1;
 				uint32_t d5 = (dist[0][1] + dist[1][0] + dist[2][1]) | 5;
-				min_d1 = std::min(min_d1, d5);
+				min_d1 = basisu::min(min_d1, d5);
 
 				uint32_t d2 = (dist[0][0] + dist[1][1] + dist[2][0]) | 2;
-				min_d0 = std::min(min_d0, d2);
+				min_d0 = basisu::min(min_d0, d2);
 
 				uint32_t d3 = (dist[0][1] + dist[1][1] + dist[2][0]) | 3;
-				min_d1 = std::min(min_d1, d3);
+				min_d1 = basisu::min(min_d1, d3);
 
 				uint32_t d6 = (dist[0][0] + dist[1][1] + dist[2][1]) | 6;
-				min_d0 = std::min(min_d0, d6);
+				min_d0 = basisu::min(min_d0, d6);
 
 				uint32_t d7 = (dist[0][1] + dist[1][1] + dist[2][1]) | 7;
-				min_d1 = std::min(min_d1, d7);
+				min_d1 = basisu::min(min_d1, d7);
 
-				uint32_t min_d = std::min(min_d0, min_d1);
+				uint32_t min_d = basisu::min(min_d0, min_d1);
 				uint32_t best_i = min_d & 7;
 
 				int delta_r = (best_i & 1) ? (max_r - avg_r) : (avg_r - min_r);
@@ -15855,10 +15855,10 @@
 					const int v2 = clamp255(mul[2] * g_eac_modifier_table[T2][s] + base[2]);
 					const int v3 = clamp255(mul[3] * g_eac_modifier_table[T3][s] + base[3]);
 
-					l0 = std::min(l0, (basisu::iabs(v0 - a) << 3) | s);
-					l1 = std::min(l1, (basisu::iabs(v1 - a) << 3) | s);
-					l2 = std::min(l2, (basisu::iabs(v2 - a) << 3) | s);
-					l3 = std::min(l3, (basisu::iabs(v3 - a) << 3) | s);
+					l0 = basisu::min(l0, (basisu::iabs(v0 - a) << 3) | s);
+					l1 = basisu::min(l1, (basisu::iabs(v1 - a) << 3) | s);
+					l2 = basisu::min(l2, (basisu::iabs(v2 - a) << 3) | s);
+					l3 = basisu::min(l3, (basisu::iabs(v3 - a) << 3) | s);
 				}
 			}
 			else if (mul_or == 1)
@@ -15872,10 +15872,10 @@
 					const int v2 = g_eac_modifier_table[T2][s] + a2;
 					const int v3 = g_eac_modifier_table[T3][s] + a3;
 
-					l0 = std::min(l0, (basisu::iabs(v0) << 3) | s);
-					l1 = std::min(l1, (basisu::iabs(v1) << 3) | s);
-					l2 = std::min(l2, (basisu::iabs(v2) << 3) | s);
-					l3 = std::min(l3, (basisu::iabs(v3) << 3) | s);
+					l0 = basisu::min(l0, (basisu::iabs(v0) << 3) | s);
+					l1 = basisu::min(l1, (basisu::iabs(v1) << 3) | s);
+					l2 = basisu::min(l2, (basisu::iabs(v2) << 3) | s);
+					l3 = basisu::min(l3, (basisu::iabs(v3) << 3) | s);
 				}
 			}
 			else
@@ -15889,10 +15889,10 @@
 					const int v2 = mul[2] * g_eac_modifier_table[T2][s] + a2;
 					const int v3 = mul[3] * g_eac_modifier_table[T3][s] + a3;
 
-					l0 = std::min(l0, (basisu::iabs(v0) << 3) | s);
-					l1 = std::min(l1, (basisu::iabs(v1) << 3) | s);
-					l2 = std::min(l2, (basisu::iabs(v2) << 3) | s);
-					l3 = std::min(l3, (basisu::iabs(v3) << 3) | s);
+					l0 = basisu::min(l0, (basisu::iabs(v0) << 3) | s);
+					l1 = basisu::min(l1, (basisu::iabs(v1) << 3) | s);
+					l2 = basisu::min(l2, (basisu::iabs(v2) << 3) | s);
+					l3 = basisu::min(l3, (basisu::iabs(v3) << 3) | s);
 				}
 			}
 
@@ -16011,13 +16011,13 @@
 				else
 				{
 					uint32_t l = basisu::iabs(clamp255(m * pTable[0] + b) - a) << 3;
-					l = std::min(l, (basisu::iabs(clamp255(m * pTable[1] + b) - a) << 3) | 1);
-					l = std::min(l, (basisu::iabs(clamp255(m * pTable[2] + b) - a) << 3) | 2);
-					l = std::min(l, (basisu::iabs(clamp255(m * pTable[3] + b) - a) << 3) | 3);
-					l = std::min(l, (basisu::iabs(clamp255(m * pTable[4] + b) - a) << 3) | 4);
-					l = std::min(l, (basisu::iabs(clamp255(m * pTable[5] + b) - a) << 3) | 5);
-					l = std::min(l, (basisu::iabs(clamp255(m * pTable[6] + b) - a) << 3) | 6);
-					l = std::min(l, (basisu::iabs(clamp255(m * pTable[7] + b) - a) << 3) | 7);
+					l = basisu::min(l, (basisu::iabs(clamp255(m * pTable[1] + b) - a) << 3) | 1);
+					l = basisu::min(l, (basisu::iabs(clamp255(m * pTable[2] + b) - a) << 3) | 2);
+					l = basisu::min(l, (basisu::iabs(clamp255(m * pTable[3] + b) - a) << 3) | 3);
+					l = basisu::min(l, (basisu::iabs(clamp255(m * pTable[4] + b) - a) << 3) | 4);
+					l = basisu::min(l, (basisu::iabs(clamp255(m * pTable[5] + b) - a) << 3) | 5);
+					l = basisu::min(l, (basisu::iabs(clamp255(m * pTable[6] + b) - a) << 3) | 6);
+					l = basisu::min(l, (basisu::iabs(clamp255(m * pTable[7] + b) - a) << 3) | 7);
 
 					sels[table][i] = l & 7;
 					total_err[table] += basisu::square<uint32_t>(l >> 3);
@@ -16464,8 +16464,8 @@
 					uint32_t low_a = 255, high_a = 0;
 					for (uint32_t i = 0; i < 16; i++)
 					{
-						low_a = std::min<uint32_t>(low_a, block_pixels[i].a);
-						high_a = std::max<uint32_t>(high_a, block_pixels[i].a);
+						low_a = basisu::min<uint32_t>(low_a, block_pixels[i].a);
+						high_a = basisu::max<uint32_t>(high_a, block_pixels[i].a);
 					}
 					low_color.set(low_a, low_a, low_a, 255);
 					high_color.set(high_a, high_a, high_a, 255);
diff --git a/transcoder/basisu_transcoder_internal.h b/transcoder/basisu_transcoder_internal.h
index 9fdcbc3..672e678 100644
--- a/transcoder/basisu_transcoder_internal.h
+++ b/transcoder/basisu_transcoder_internal.h
@@ -686,8 +686,8 @@
 
 		bool operator== (const color32&rhs) const { return m == rhs.m; }
 
-		static color32 comp_min(const color32& a, const color32& b) { return color32(cNoClamp, std::min(a[0], b[0]), std::min(a[1], b[1]), std::min(a[2], b[2]), std::min(a[3], b[3])); }
-		static color32 comp_max(const color32& a, const color32& b) { return color32(cNoClamp, std::max(a[0], b[0]), std::max(a[1], b[1]), std::max(a[2], b[2]), std::max(a[3], b[3])); }
+		static color32 comp_min(const color32& a, const color32& b) { return color32(cNoClamp, basisu::min(a[0], b[0]), basisu::min(a[1], b[1]), basisu::min(a[2], b[2]), basisu::min(a[3], b[3])); }
+		static color32 comp_max(const color32& a, const color32& b) { return color32(cNoClamp, basisu::max(a[0], b[0]), basisu::max(a[1], b[1]), basisu::max(a[2], b[2]), basisu::max(a[3], b[3])); }
 	};
 
 	struct endpoint