Переглянути джерело

New scalar types (#792)

This change is to add fixed width scalar types in HLSL 2018.
These types are: int16_t, uint16_t, int32_t, uint32_t, float16_t, float32_t, and float64_t.
Prior HLSL versions do not support these fixed width types.

This change also renames /no-min-precision command line option to /enable-16bit-types. int16_t and uint16_t are only allowed with this mode.
Young Kim 7 роки тому
батько
коміт
a48d81fcac
50 змінених файлів з 11035 додано та 2893 видалено
  1. 2 4
      include/dxc/Support/HLSLOptions.h
  2. 3 3
      include/dxc/Support/HLSLOptions.td
  3. 21 10
      lib/DxcSupport/HLSLOptions.cpp
  4. 18 11
      tools/clang/include/clang/AST/HlslTypes.h
  5. 4 0
      tools/clang/include/clang/Basic/DiagnosticSemaKinds.td
  6. 1 3
      tools/clang/include/clang/Basic/LangOptions.h
  7. 3 3
      tools/clang/include/clang/Driver/Options.td
  8. 80 33
      tools/clang/lib/AST/ASTContextHLSL.cpp
  9. 21 10
      tools/clang/lib/Frontend/CompilerInvocation.cpp
  10. 3 3
      tools/clang/lib/Parse/ParseDecl.cpp
  11. 1 1
      tools/clang/lib/Sema/SemaCXXScopeSpec.cpp
  12. 2 2
      tools/clang/lib/Sema/SemaDecl.cpp
  13. 62 16
      tools/clang/lib/Sema/SemaHLSL.cpp
  14. 1 1
      tools/clang/lib/Sema/SemaOverload.cpp
  15. 2 2
      tools/clang/lib/Sema/SemaStmt.cpp
  16. 1 1
      tools/clang/test/CodeGenHLSL/cbufferHalf-struct.hlsl
  17. 1 1
      tools/clang/test/CodeGenHLSL/cbufferHalf.hlsl
  18. 1 1
      tools/clang/test/CodeGenHLSL/cbufferInt16-struct.hlsl
  19. 1 1
      tools/clang/test/CodeGenHLSL/cbufferInt16.hlsl
  20. 1 1
      tools/clang/test/CodeGenHLSL/dataLayoutHalf.hlsl
  21. 23 0
      tools/clang/test/CodeGenHLSL/fixedWidth.hlsl
  22. 15 0
      tools/clang/test/CodeGenHLSL/fixedWidth16Bit.hlsl
  23. 1 1
      tools/clang/test/CodeGenHLSL/literals_exact_precision_Mod.hlsl
  24. 1 1
      tools/clang/test/CodeGenHLSL/raw_buf5.hlsl
  25. 1 1
      tools/clang/test/CodeGenHLSL/signature_packing_by_width.hlsl
  26. 1 1
      tools/clang/test/CodeGenHLSL/struct_buf4.hlsl
  27. 1 1
      tools/clang/test/CodeGenHLSL/struct_buf5.hlsl
  28. 1 1
      tools/clang/test/CodeGenHLSL/struct_buf_new_layout.hlsl
  29. 1 1
      tools/clang/test/CodeGenHLSL/typed_buffer_half.hlsl
  30. 25 0
      tools/clang/test/CodeGenHLSL/typedef_new_type.hlsl
  31. 1 1
      tools/clang/test/CodeGenHLSL/uav_typed_load_store3.hlsl
  32. 4 4
      tools/clang/test/HLSL/ShaderOpArith.xml
  33. 1 1
      tools/clang/test/HLSL/enums.hlsl
  34. 55 13
      tools/clang/test/HLSL/matrix-syntax-exact-precision.hlsl
  35. 314 157
      tools/clang/test/HLSL/scalar-assignments-exact-precision.hlsl
  36. 4109 0
      tools/clang/test/HLSL/scalar-operators-assign-exact-precision.hlsl
  37. 6119 2555
      tools/clang/test/HLSL/scalar-operators-exact-precision.hlsl
  38. 0 5
      tools/clang/test/HLSL/scalar-operators.hlsl
  39. 55 9
      tools/clang/test/HLSL/vector-syntax-exact-precision.hlsl
  40. 2 2
      tools/clang/test/HLSL/vector-syntax.hlsl
  41. 4 6
      tools/clang/tools/dxcompiler/dxcompilerobj.cpp
  42. 1 1
      tools/clang/tools/dxlib-sample/lib_share_compile.cpp
  43. 3 3
      tools/clang/tools/libclang/CIndex.cpp
  44. 14 10
      tools/clang/unittests/HLSL/CompilationResult.h
  45. 39 2
      tools/clang/unittests/HLSL/CompilerTest.cpp
  46. 3 4
      tools/clang/unittests/HLSL/ExecutionTest.cpp
  47. 2 2
      tools/clang/unittests/HLSL/ValidationTest.cpp
  48. 5 0
      tools/clang/unittests/HLSL/VerifierTest.cpp
  49. 1 0
      utils/hct/VerifierHelper.py
  50. 4 4
      utils/hct/hcttestcmds.cmd

+ 2 - 4
include/dxc/Support/HLSLOptions.h

@@ -129,10 +129,8 @@ public:
   bool AvoidFlowControl;     // OPT_Gfa
   bool PreferFlowControl;    // OPT_Gfp
   bool EnableStrictMode;     // OPT_Ges
-  bool HLSL2015;  // OPT_hlsl_version (=2015)
-  bool HLSL2016;  // OPT_hlsl_version (=2016)
-  bool HLSL2017;  // OPT_hlsl_version (=2017)
-  bool NoMinPrecision; // OPT_no_min_precision
+  unsigned long HLSLVersion; // OPT_hlsl_version (2015-2018)
+  bool Enable16BitTypes; // OPT_enable_16bit_types
   bool OptDump; // OPT_ODump - dump optimizer commands
   bool OutputWarnings = true; // OPT_no_warnings
   bool ShowHelp = false;  // OPT_help

+ 3 - 3
include/dxc/Support/HLSLOptions.td

@@ -224,13 +224,13 @@ def pack_prefix_stable : Flag<["-", "/"], "pack_prefix_stable">, Group<hlslcomp_
 def pack_optimized : Flag<["-", "/"], "pack_optimized">, Group<hlslcomp_Group>, Flags<[CoreOption]>,
   HelpText<"Optimize signature packing assuming identical signature provided for each connecting stage">;
 def hlsl_version : Separate<["-", "/"], "HV">, Group<hlslcomp_Group>, Flags<[CoreOption]>,
-  HelpText<"HLSL version (2016, 2017)">;
+  HelpText<"HLSL version (2016, 2017, 2018). Default is 2016">;
 def no_warnings : Flag<["-", "/"], "no-warnings">, Group<hlslcomp_Group>, Flags<[CoreOption]>,
   HelpText<"Suppress warnings">;
 def rootsig_define : Separate<["-", "/"], "rootsig-define">, Group<hlslcomp_Group>, Flags<[CoreOption]>,
   HelpText<"Read root signature from a #define">;
-def no_min_precision: Flag<["-", "/"], "no-min-precision">, Flags<[CoreOption, DriverOption, HelpHidden]>,
-  HelpText<"Do not use min precision but use strict precision types.">;
+def enable_16bit_types: Flag<["-", "/"], "enable-16bit-types">, Flags<[CoreOption, DriverOption]>, Group<hlslcomp_Group>,
+  HelpText<"Enable 16bit types and disable min precision types.">;
 def ignore_line_directives : Flag<["-", "/"], "ignore-line-directives">, HelpText<"Ignore line directives">, Flags<[CoreOption]>, Group<hlslcomp_Group>;
 
 // SPIRV Change Starts

+ 21 - 10
lib/DxcSupport/HLSLOptions.cpp

@@ -252,15 +252,26 @@ int ReadDxcOpts(const OptTable *optionTable, unsigned flagsToInclude,
   }
 
   llvm::StringRef ver = Args.getLastArgValue(OPT_hlsl_version);
-  opts.HLSL2015 = opts.HLSL2016 = opts.HLSL2017 = false;
-  if (ver.empty() || ver == "2016") { opts.HLSL2016 = true; }   // Default to 2016
-  else if           (ver == "2015") { opts.HLSL2015 = true; }
-  else if           (ver == "2017") { opts.HLSL2017 = true; }
+  if (ver.empty()) { opts.HLSLVersion = 2016; }   // Default to 2016
   else {
-    errors << "Unknown HLSL version";
-    return 1;
+    try {
+      opts.HLSLVersion = std::stoul(std::string(ver));
+      if (opts.HLSLVersion < 2015 || opts.HLSLVersion > 2018) {
+        errors << "Unknown HLSL version: " << opts.HLSLVersion;
+        return 1;
+      }
+    }
+    catch (const std::invalid_argument &) {
+      errors << "Invalid HLSL Version";
+      return 1;
+    }
+    catch (const std::out_of_range &) {
+      errors << "Invalid HLSL Version";
+      return 1;
+    }
   }
-  if (opts.HLSL2015 && !(flagsToInclude & HlslFlags::ISenseOption)) {
+
+  if (opts.HLSLVersion == 2015 && !(flagsToInclude & HlslFlags::ISenseOption)) {
     errors << "HLSL Version 2015 is only supported for language services";
     return 1;
   }
@@ -270,7 +281,7 @@ int ReadDxcOpts(const OptTable *optionTable, unsigned flagsToInclude,
   opts.AssemblyCode = Args.getLastArgValue(OPT_Fc);
   opts.DebugFile = Args.getLastArgValue(OPT_Fd);
   opts.ExtractPrivateFile = Args.getLastArgValue(OPT_getprivate);
-  opts.NoMinPrecision = Args.hasFlag(OPT_no_min_precision, OPT_INVALID, false);
+  opts.Enable16BitTypes = Args.hasFlag(OPT_enable_16bit_types, OPT_INVALID, false);
   opts.OutputObject = Args.getLastArgValue(OPT_Fo);
   opts.OutputHeader = Args.getLastArgValue(OPT_Fh);
   opts.OutputWarningsFile = Args.getLastArgValue(OPT_Fe);
@@ -321,8 +332,8 @@ int ReadDxcOpts(const OptTable *optionTable, unsigned flagsToInclude,
       errors << "denorm option is only allowed for shader model 6.2 and above.";
       return 1;
     }
-    if (opts.NoMinPrecision) {
-      errors << "no min precision mode is only allowed for shader model 6.2 and above.";
+    if (opts.Enable16BitTypes) {
+      errors << "enable-16bit-types is only allowed for shader model 6.2 and above.";
       return 1;
     }
   }

+ 18 - 11
tools/clang/include/clang/AST/HlslTypes.h

@@ -62,16 +62,21 @@ enum HLSLScalarType {
   HLSLScalarType_uint_min16,
   HLSLScalarType_float_lit,
   HLSLScalarType_int_lit,
+  HLSLScalarType_int16,
+  HLSLScalarType_int32,
   HLSLScalarType_int64,
+  HLSLScalarType_uint16,
+  HLSLScalarType_uint32,
   HLSLScalarType_uint64,
-  HLSLScalarType_int16,
-  HLSLScalarType_uint16
+  HLSLScalarType_float16,
+  HLSLScalarType_float32,
+  HLSLScalarType_float64,
 };
 
 HLSLScalarType MakeUnsigned(HLSLScalarType T);
 
 static const HLSLScalarType HLSLScalarType_minvalid = HLSLScalarType_bool;
-static const HLSLScalarType HLSLScalarType_max = HLSLScalarType_uint16;
+static const HLSLScalarType HLSLScalarType_max = HLSLScalarType_float64;
 static const size_t HLSLScalarTypeCount = static_cast<size_t>(HLSLScalarType_max) + 1;
 
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -413,7 +418,8 @@ bool TryParseMatrixShorthand(
             size_t typeNameLen,
   _Out_     HLSLScalarType* parsedType,
   _Out_     int* rowCount,
-  _Out_     int* colCount);
+  _Out_     int* colCount,
+  _In_      const clang::LangOptions& langOption);
 
 _Success_(return != false)
 bool TryParseVectorShorthand(
@@ -421,15 +427,16 @@ bool TryParseVectorShorthand(
             const char* typeName,
             size_t typeNameLen,
   _Out_     HLSLScalarType* parsedType,
-  _Out_     int* elementCount);
+  _Out_     int* elementCount,
+  _In_      const clang::LangOptions& langOption);
 
 _Success_(return != false)
 bool TryParseScalar(
   _In_count_(typenameLen)
   const char* typeName,
   size_t typeNameLen,
-  _Out_     HLSLScalarType *parsedType
-);
+  _Out_     HLSLScalarType *parsedType,
+  _In_      const clang::LangOptions& langOption);
 
 _Success_(return != false)
 bool TryParseAny(
@@ -438,8 +445,8 @@ bool TryParseAny(
   size_t typeNameLen,
   _Out_ HLSLScalarType *parsedType,
   _Out_ int *rowCount,
-  _Out_ int *colCount
-);
+  _Out_ int *colCount,
+  _In_      const clang::LangOptions& langOption);
 
 _Success_(return != false)
 bool TryParseMatrixOrVectorDimension(
@@ -447,8 +454,8 @@ bool TryParseMatrixOrVectorDimension(
   const char *typeName,
   size_t typeNameLen,
   _Out_opt_ int *rowCount,
-  _Out_opt_ int *colCount
-);
+  _Out_opt_ int *colCount,
+  _In_      const clang::LangOptions& langOption);
 
 } // end hlsl namespace
 #endif

+ 4 - 0
tools/clang/include/clang/Basic/DiagnosticSemaKinds.td

@@ -7646,6 +7646,10 @@ def warn_hlsl_unused_call : Warning<
   InGroup<UnusedValue>;
 def err_hlsl_func_in_func_decl : Error<
    "function declaration is not allowed in function parameters">;
+def err_hlsl_unsupported_keyword_for_version : Error<
+   "%0 is only allowed for HLSL %1 and above.">;
+def err_hlsl_unsupported_keyword_for_min_precision : Error<
+   "%0 is only supported with -enable-16bit-types option">;
 }
 // HLSL Change Ends
 

+ 1 - 3
tools/clang/include/clang/Basic/LangOptions.h

@@ -149,9 +149,7 @@ public:
 #endif
 
   // MS Change Starts
-  bool HLSL2015;  // Only supported for IntelliSense scenarios.
-  bool HLSL2016;
-  bool HLSL2017;
+  unsigned HLSLVersion;  // Only supported for IntelliSense scenarios.
   std::string HLSLEntryFunction;
   unsigned RootSigMajor;
   unsigned RootSigMinor;

+ 3 - 3
tools/clang/include/clang/Driver/Options.td

@@ -678,8 +678,8 @@ def fmsc_version : Joined<["-"], "fmsc-version=">, Group<f_Group>, Flags<[Driver
   HelpText<"Microsoft compiler version number to report in _MSC_VER (0 = don't define it (default))">;
 def hlsl_version : Separate<["-", "/"], "HV">, Group<f_Group>, Flags<[DriverOption, CoreOption, CC1Option]>,
   HelpText<"HLSL version (2015, 2016, 2017)">; // HLSL Change - mimic the HLSLOptions.td flag
-def no_min_precision : Flag<["-", "/"], "no-min-precision">, Group<f_Group>, Flags<[CoreOption, DriverOption, HelpHidden, CC1Option]>,
-  HelpText<"Do not use min precision but use strict precision types.">; // HLSL Change - mimic the HLSLOptions.td flag
+def enable_16bit_types: Flag<["-", "/"], "enable-16bit-types">, Flags<[CoreOption, DriverOption, HelpHidden]>,
+  HelpText<"Enable 16bit types and disable min precision types.">; // HLSL Change - mimic the HLSLOptions.td flag
 def fms_compatibility_version
     : Joined<["-"], "fms-compatibility-version=">,
       Group<f_Group>,
@@ -1278,7 +1278,7 @@ def munaligned_access : Flag<["-"], "munaligned-access">, Group<m_arm_Features_G
   HelpText<"Allow memory accesses to be unaligned (AArch32/AArch64 only)">;
 def mno_unaligned_access : Flag<["-"], "mno-unaligned-access">, Group<m_arm_Features_Group>,
   HelpText<"Force all memory accesses to be aligned (AArch32/AArch64 only)">;
-def mstrict_align : Flag<["-"], "mstrict-align">, Alias<mno_unaligned_access>, Flags<[CC1Option,HelpHidden]>,
+def mstrict_align : Flag<["-"], "mstrict-align">, Alias<mno_unaligned_access>, Flags<[CC1Option]>,
   HelpText<"Force all memory accesses to be aligned (same as mno-unaligned-access)">;
 def mno_thumb : Flag<["-"], "mno-thumb">, Group<m_arm_Features_Group>;
 def mrestrict_it: Flag<["-"], "mrestrict-it">, Group<m_arm_Features_Group>,

+ 80 - 33
tools/clang/lib/AST/ASTContextHLSL.cpp

@@ -64,18 +64,24 @@ const char* HLSLScalarTypeNames[] = {
   "min12int",
   "min16int",
   "min16uint",
-  "literal int",
   "literal float",
+  "literal int",
+  "int16_t",
+  "int32_t",
   "int64_t",
+  "uint16_t",
+  "uint32_t",
   "uint64_t",
-  "int16_t",
-  "uint16_t"
+  "float16_t",
+  "float32_t",
+  "float64_t"
 };
 
 static_assert(HLSLScalarTypeCount == _countof(HLSLScalarTypeNames), "otherwise scalar constants are not aligned");
 
-static HLSLScalarType FindScalarTypeByName(const char *typeName, const size_t typeLen) {
+static HLSLScalarType FindScalarTypeByName(const char *typeName, const size_t typeLen, const LangOptions& langOptions) {
   // skipped HLSLScalarType: unknown, literal int, literal float
+
   switch (typeLen) {
     case 3: // int
       if (typeName[0] == 'i') {
@@ -120,21 +126,15 @@ static HLSLScalarType FindScalarTypeByName(const char *typeName, const size_t ty
         return HLSLScalarType_double;
       }
       break;
-    case 7: // int64_t, int16_t
+    case 7: // int64_t
       if (typeName[0] == 'i' && typeName[1] == 'n') {
         if (typeName[3] == '6') {
           if (strncmp(typeName, "int64_t", 7))
             break;
           return HLSLScalarType_int64;
         }
-        else if (typeName[3] == '1') {
-          if (strncmp(typeName, "int16_t", 7))
-            break;
-          return HLSLScalarType_int16;
-        }
       }
-      break;
-    case 8: // min12int, min16int, uint64_t, uint16_t
+    case 8: // min12int, min16int, uint64_t
       if (typeName[0] == 'm' && typeName[1] == 'i') {
         if (typeName[4] == '2') {
           if (strncmp(typeName, "min12int", 8))
@@ -147,17 +147,12 @@ static HLSLScalarType FindScalarTypeByName(const char *typeName, const size_t ty
           return HLSLScalarType_int_min16;
         }
       }
-      if (typeName[0] == 'u' && typeName[1] == 'i') {
+      else if (typeName[0] == 'u' && typeName[1] == 'i') {
         if (typeName[4] == '6') {
-          if (strncmp(typeName, "uint64_t", 7))
+          if (strncmp(typeName, "uint64_t", 8))
             break;
           return HLSLScalarType_uint64;
         }
-        else if (typeName[4] == '1') {
-          if (strncmp(typeName, "uint16_t", 7))
-            break;
-          return HLSLScalarType_uint16;
-        }
       }
       break;
     case 9: // min16uint
@@ -184,6 +179,56 @@ static HLSLScalarType FindScalarTypeByName(const char *typeName, const size_t ty
     default:
       break;
   }
+  // fixed width types (int16_t, uint16_t, int32_t, uint32_t, float16_t, float32_t, float64_t)
+  // are only supported in HLSL 2018
+  if (langOptions.HLSLVersion >= 2018) {
+    switch (typeLen) {
+    case 7: // int16_t, int32_t
+      if (typeName[0] == 'i' && typeName[1] == 'n') {
+        if (typeName[3] == '1') {
+          if (strncmp(typeName, "int16_t", 7))
+            break;
+          return HLSLScalarType_int16;
+        }
+        else if (typeName[3] == '3') {
+          if (strncmp(typeName, "int32_t", 7))
+            break;
+          return HLSLScalarType_int32;
+        }
+      }
+    case 8: // uint16_t, uint32_t
+      if (typeName[0] == 'u' && typeName[1] == 'i') {
+        if (typeName[4] == '1') {
+          if (strncmp(typeName, "uint16_t", 8))
+            break;
+          return HLSLScalarType_uint16;
+        }
+        else if (typeName[4] == '3') {
+          if (strncmp(typeName, "uint32_t", 8))
+            break;
+          return HLSLScalarType_uint32;
+        }
+      }
+    case 9: // float16_t, float32_t, float64_t
+      if (typeName[0] == 'f' && typeName[1] == 'l') {
+        if (typeName[5] == '1') {
+          if (strncmp(typeName, "float16_t", 9))
+            break;
+          return HLSLScalarType_float16;
+        }
+        else if (typeName[5] == '3') {
+          if (strncmp(typeName, "float32_t", 9))
+            break;
+          return HLSLScalarType_float32;
+        }
+        else if (typeName[5] == '6') {
+          if (strncmp(typeName, "float64_t", 9))
+            break;
+          return HLSLScalarType_float64;
+        }
+      }
+    }
+  }
   return HLSLScalarType_unknown;
 }
 
@@ -896,7 +941,8 @@ bool hlsl::TryParseMatrixShorthand(
   size_t typeNameLen,
   HLSLScalarType* parsedType,
   int* rowCount,
-  int* colCount
+  int* colCount,
+  const clang::LangOptions& langOptions
 )
 {
   //
@@ -905,10 +951,10 @@ bool hlsl::TryParseMatrixShorthand(
   // x is a literal 'x' character.
   // PrimitiveType is one of the HLSLScalarTypeNames values.
   //
-  if (TryParseMatrixOrVectorDimension(typeName, typeNameLen, rowCount, colCount) &&
+  if (TryParseMatrixOrVectorDimension(typeName, typeNameLen, rowCount, colCount, langOptions) &&
     *rowCount != 0 && *colCount != 0) {
     // compare scalar component
-    HLSLScalarType type = FindScalarTypeByName(typeName, typeNameLen-3);
+    HLSLScalarType type = FindScalarTypeByName(typeName, typeNameLen-3, langOptions);
     if (type!= HLSLScalarType_unknown) {
       *parsedType = type;
       return true;
@@ -924,13 +970,14 @@ bool hlsl::TryParseVectorShorthand(
   const char* typeName,
   size_t typeNameLen,
   HLSLScalarType* parsedType,
-  int* elementCount
+  int* elementCount,
+  const clang::LangOptions& langOptions
   )
 {
   // At least *something*N characters necessary, where something is at least 'int'
   if (TryParseColOrRowChar(typeName[typeNameLen - 1], elementCount)) {
     // compare scalar component
-    HLSLScalarType type = FindScalarTypeByName(typeName, typeNameLen-1);
+    HLSLScalarType type = FindScalarTypeByName(typeName, typeNameLen-1, langOptions);
     if (type!= HLSLScalarType_unknown) {
       *parsedType = type;
       return true;
@@ -946,9 +993,9 @@ bool hlsl::TryParseScalar(
   _In_count_(typenameLen)
             const char* typeName,
             size_t typeNameLen,
-  _Out_     HLSLScalarType *parsedType
-) {
-  HLSLScalarType type = FindScalarTypeByName(typeName, typeNameLen);
+  _Out_     HLSLScalarType *parsedType,
+  _In_      const clang::LangOptions& langOptions) {
+  HLSLScalarType type = FindScalarTypeByName(typeName, typeNameLen, langOptions);
   if (type!= HLSLScalarType_unknown) {
     *parsedType = type;
     return true;
@@ -964,15 +1011,15 @@ bool hlsl::TryParseAny(
   size_t typeNameLen,
   _Out_ HLSLScalarType *parsedType,
   int *rowCount,
-  int *colCount
-) {
+  int *colCount,
+  _In_ const clang::LangOptions& langOptions) {
   // at least 'int'
   const size_t MinValidLen = 3;
   if (typeNameLen >= MinValidLen) {
-    TryParseMatrixOrVectorDimension(typeName, typeNameLen, rowCount, colCount);
+    TryParseMatrixOrVectorDimension(typeName, typeNameLen, rowCount, colCount, langOptions);
     int suffixLen = *colCount == 0 ? 0 :
                     *rowCount == 0 ? 1 : 3;
-    HLSLScalarType type = FindScalarTypeByName(typeName, typeNameLen-suffixLen);
+    HLSLScalarType type = FindScalarTypeByName(typeName, typeNameLen-suffixLen, langOptions);
     if (type!= HLSLScalarType_unknown) {
       *parsedType = type;
       return true;
@@ -990,8 +1037,8 @@ bool hlsl::TryParseMatrixOrVectorDimension(
     const char *typeName,
     size_t typeNameLen,
     _Out_opt_ int *rowCount,
-    _Out_opt_ int *colCount
-) {
+    _Out_opt_ int *colCount,
+  _In_      const clang::LangOptions& langOptions) {
   *rowCount = 0;
   *colCount = 0;
   size_t MinValidLen = 3; // at least int

+ 21 - 10
tools/clang/lib/Frontend/CompilerInvocation.cpp

@@ -1720,20 +1720,31 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
       getLastArgIntValue(Args, OPT_fsanitize_address_field_padding, 0, Diags);
   Opts.SanitizerBlacklistFiles = Args.getAllArgValues(OPT_fsanitize_blacklist);
 #else
-  StringRef ver = Args.getLastArgValue(OPT_hlsl_version);
-  Opts.HLSL2015 = Opts.HLSL2016 = Opts.HLSL2017 = false;
-  if (ver.empty() || ver == "2016" || ver == "-2016") { Opts.HLSL2016 = true; }   // Default to 2016
-  else if           (ver == "2015" || ver == "-2015") { Opts.HLSL2015 = true; }
-  else if           (ver == "2017" || ver == "-2017") { Opts.HLSL2017 = true; }
+  llvm::StringRef ver = Args.getLastArgValue(OPT_hlsl_version);
+  if (ver.empty()) { Opts.HLSLVersion = 2016; }   // Default to 2016
   else {
-    Diags.Report(diag::err_drv_invalid_value)
-      << Args.getLastArg(OPT_hlsl_version)->getAsString(Args)
-      << ver;
+    try {
+      Opts.HLSLVersion = std::stoi(std::string(ver));
+      if (Opts.HLSLVersion < 2015 || Opts.HLSLVersion > 2018) {
+       Diags.Report(diag::err_drv_invalid_value)
+        << Args.getLastArg(OPT_hlsl_version)->getAsString(Args)
+        << ver;
+      }
+    }
+    catch (const std::invalid_argument &) {
+      Diags.Report(diag::err_drv_invalid_value)
+        << Args.getLastArg(OPT_hlsl_version)->getAsString(Args)
+        << ver;
+    }
+    catch (const std::out_of_range &) {
+      Diags.Report(diag::err_drv_invalid_value)
+        << Args.getLastArg(OPT_hlsl_version)->getAsString(Args)
+        << ver;
+    }
   }
-
   // Enable low precision for HLSL 2018
   // TODO: should we tie low precision to HLSL2018 only?
-  Opts.UseMinPrecision = !Args.hasArg(options::OPT_no_min_precision);
+  Opts.UseMinPrecision = !Args.hasArg(options::OPT_enable_16bit_types);
 #endif // #ifdef MS_SUPPORT_VARIABLE_LANGOPTS
 }
 

+ 3 - 3
tools/clang/lib/Parse/ParseDecl.cpp

@@ -4420,7 +4420,7 @@ void Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS,
                                 const ParsedTemplateInfo &TemplateInfo,
                                 AccessSpecifier AS, DeclSpecContext DSC) {
   // HLSL Change Starts
-  if (getLangOpts().HLSL && !getLangOpts().HLSL2017) {
+  if (getLangOpts().HLSL && getLangOpts().HLSLVersion < 2017) {
     Diag(Tok, diag::err_hlsl_enum);
     // Skip the rest of this declarator, up until the comma or semicolon.
     SkipUntil(tok::comma, StopAtSemi);
@@ -4480,7 +4480,7 @@ void Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS,
 
   bool AllowFixedUnderlyingType = AllowDeclaration &&
     (getLangOpts().CPlusPlus11 || getLangOpts().MicrosoftExt ||
-     getLangOpts().ObjC2 || getLangOpts().HLSL2017);
+     getLangOpts().ObjC2 || getLangOpts().HLSLVersion >= 2017);
 
   CXXScopeSpec &SS = DS.getTypeSpecScope();
   if (getLangOpts().CPlusPlus) {
@@ -4782,7 +4782,7 @@ void Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS,
 ///         identifier
 ///
 void Parser::ParseEnumBody(SourceLocation StartLoc, Decl *EnumDecl) {
-  assert(getLangOpts().HLSL2017 && "HLSL does not support enums before 2017"); // HLSL Change
+  assert(getLangOpts().HLSLVersion >= 2017 && "HLSL does not support enums before 2017"); // HLSL Change
 
   // Enter the scope of the enum body and start the definition.
   ParseScope EnumScope(this, Scope::DeclScope | Scope::EnumScope);

+ 1 - 1
tools/clang/lib/Sema/SemaCXXScopeSpec.cpp

@@ -618,7 +618,7 @@ bool Sema::BuildCXXNestedNameSpecifier(Scope *S,
   if (!AcceptSpec && IsExtension) {
     AcceptSpec = true;
     // HLSL Change: Suppress c++11 extension warnings for nested name specifier in HLSL2017
-    if (!getLangOpts().HLSL2017)
+    if (getLangOpts().HLSLVersion < 2017)
         Diag(IdentifierLoc, diag::ext_nested_name_spec_is_enum);
   }
   if (AcceptSpec) {

+ 2 - 2
tools/clang/lib/Sema/SemaDecl.cpp

@@ -11705,7 +11705,7 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
   }
 
   // HLSL Change Starts
-  if (getLangOpts().HLSL2015 && TUK == TUK_Declaration) {
+  if (getLangOpts().HLSLVersion == 2015 && TUK == TUK_Declaration) {
     Diag(NameLoc, diag::err_hlsl_unsupported_construct)
         << "struct declaration without definition";
   }
@@ -13660,7 +13660,7 @@ EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum,
     else {
       SourceLocation ExpLoc;
       // HLSL Change - check constant expression for enum
-      if ((getLangOpts().HLSL2017 || getLangOpts().CPlusPlus11) &&
+      if ((getLangOpts().HLSLVersion >= 2017 || getLangOpts().CPlusPlus11) &&
           Enum->isFixed() && !getLangOpts().MSVCCompat) {
         // C++11 [dcl.enum]p5: If the underlying type is fixed, [...] the
         // constant-expression in the enumerator-definition shall be a converted

+ 62 - 16
tools/clang/lib/Sema/SemaHLSL.cpp

@@ -3047,22 +3047,62 @@ public:
     // TODO: enalbe this once we introduce precise master option
     bool UseMinPrecision = m_context->getLangOpts().UseMinPrecision;
     if (type == HLSLScalarType_int_min12) {
-      const char *PromotedType = "min16int"; // TODO: print int16 once we support true int16/uint16 support.
-      m_sema->Diag(loc, diag::warn_hlsl_sema_minprecision_promotion) << "min12int" << PromotedType;
-    }
-    else if (type == HLSLScalarType_float_min10) {
-      const char *PromotedType = UseMinPrecision ? "min16float": "half";
-      m_sema->Diag(loc, diag::warn_hlsl_sema_minprecision_promotion) << "min10float" << PromotedType;
+      const char *PromotedType =
+          UseMinPrecision ? HLSLScalarTypeNames[HLSLScalarType_int_min16]
+                          : HLSLScalarTypeNames[HLSLScalarType_int16];
+      m_sema->Diag(loc, diag::warn_hlsl_sema_minprecision_promotion)
+          << HLSLScalarTypeNames[type] << PromotedType;
+    } else if (type == HLSLScalarType_float_min10) {
+      const char *PromotedType =
+          UseMinPrecision ? HLSLScalarTypeNames[HLSLScalarType_float_min16]
+                          : HLSLScalarTypeNames[HLSLScalarType_float16];
+      m_sema->Diag(loc, diag::warn_hlsl_sema_minprecision_promotion)
+          << HLSLScalarTypeNames[type] << PromotedType;
     }
     if (!UseMinPrecision) {
       if (type == HLSLScalarType_float_min16) {
-        m_sema->Diag(loc, diag::warn_hlsl_sema_minprecision_promotion) << "min16float" << "half";
-      }
-      else if (type == HLSLScalarType_int_min16) {
-        m_sema->Diag(loc, diag::warn_hlsl_sema_minprecision_promotion) << "min16int" << "int16_t";
+        m_sema->Diag(loc, diag::warn_hlsl_sema_minprecision_promotion)
+            << HLSLScalarTypeNames[type]
+            << HLSLScalarTypeNames[HLSLScalarType_float16];
+      } else if (type == HLSLScalarType_int_min16) {
+        m_sema->Diag(loc, diag::warn_hlsl_sema_minprecision_promotion)
+            << HLSLScalarTypeNames[type]
+            << HLSLScalarTypeNames[HLSLScalarType_int16];
+      } else if (type == HLSLScalarType_uint_min16) {
+        m_sema->Diag(loc, diag::warn_hlsl_sema_minprecision_promotion)
+            << HLSLScalarTypeNames[type]
+            << HLSLScalarTypeNames[HLSLScalarType_uint16];
+      }
+    }
+  }
+
+  void DiagnoseHLSLScalarType(HLSLScalarType type, SourceLocation Loc) {
+    if (getSema()->getLangOpts().HLSLVersion < 2018) {
+      switch (type) {
+      case HLSLScalarType_float16:
+      case HLSLScalarType_float32:
+      case HLSLScalarType_float64:
+      case HLSLScalarType_int16:
+      case HLSLScalarType_int32:
+      case HLSLScalarType_uint16:
+      case HLSLScalarType_uint32:
+        m_sema->Diag(Loc, diag::err_hlsl_unsupported_keyword_for_version)
+            << HLSLScalarTypeNames[type] << "2018";
+        break;
+      default:
+        break;
       }
-      else if (type == HLSLScalarType_uint_min16) {
-        m_sema->Diag(loc, diag::warn_hlsl_sema_minprecision_promotion) << "min16uint" << "uint16_t";
+    }
+    if (getSema()->getLangOpts().UseMinPrecision) {
+      switch (type) {
+      case HLSLScalarType_float16:
+      case HLSLScalarType_int16:
+      case HLSLScalarType_uint16:
+        m_sema->Diag(Loc, diag::err_hlsl_unsupported_keyword_for_min_precision)
+            << HLSLScalarTypeNames[type];
+        break;
+      default:
+        break;
       }
     }
   }
@@ -3088,7 +3128,7 @@ public:
     int colCount;
 
     // Try parsing hlsl scalar types that is not initialized at AST time.
-    if (TryParseAny(nameIdentifier.data(), nameIdentifier.size(), &parsedType, &rowCount, &colCount)) {
+    if (TryParseAny(nameIdentifier.data(), nameIdentifier.size(), &parsedType, &rowCount, &colCount, getSema()->getLangOpts())) {
       assert(parsedType != HLSLScalarType_unknown && "otherwise, TryParseHLSLScalarType should not have succeeded.");
       if (rowCount == 0 && colCount == 0) { // scalar
         TypedefDecl *typeDecl = LookupScalarType(parsedType);
@@ -4457,10 +4497,15 @@ void HLSLExternalSource::AddBaseTypes()
   m_baseTypes[HLSLScalarType_uint_min16] = m_context->UnsignedShortTy;
   m_baseTypes[HLSLScalarType_float_lit] = m_context->LitFloatTy;
   m_baseTypes[HLSLScalarType_int_lit] = m_context->LitIntTy;
-  m_baseTypes[HLSLScalarType_int64] = m_context->LongLongTy;
-  m_baseTypes[HLSLScalarType_uint64] = m_context->UnsignedLongLongTy;
   m_baseTypes[HLSLScalarType_int16] = m_context->ShortTy;
+  m_baseTypes[HLSLScalarType_int32] = m_context->IntTy;
+  m_baseTypes[HLSLScalarType_int64] = m_context->LongLongTy;
   m_baseTypes[HLSLScalarType_uint16] = m_context->UnsignedShortTy;
+  m_baseTypes[HLSLScalarType_uint32] = m_context->UnsignedIntTy;
+  m_baseTypes[HLSLScalarType_uint64] = m_context->UnsignedLongLongTy;
+  m_baseTypes[HLSLScalarType_float16] = m_context->HalfTy;
+  m_baseTypes[HLSLScalarType_float32] = m_context->FloatTy;
+  m_baseTypes[HLSLScalarType_float64] = m_context->DoubleTy;
 }
 
 void HLSLExternalSource::AddHLSLScalarTypes()
@@ -10938,9 +10983,10 @@ bool Sema::DiagnoseHLSLLookup(const LookupResult &R) {
     StringRef nameIdentifier = idInfo->getName();
     HLSLScalarType parsedType;
     int rowCount, colCount;
-    if (TryParseAny(nameIdentifier.data(), nameIdentifier.size(), &parsedType, &rowCount, &colCount)) {
+    if (TryParseAny(nameIdentifier.data(), nameIdentifier.size(), &parsedType, &rowCount, &colCount, getLangOpts())) {
       HLSLExternalSource *hlslExternalSource = HLSLExternalSource::FromSema(this);
       hlslExternalSource->WarnMinPrecision(parsedType, R.getNameLoc());
+      hlslExternalSource->DiagnoseHLSLScalarType(parsedType, R.getNameLoc());
     }
   }
   return true;

+ 1 - 1
tools/clang/lib/Sema/SemaOverload.cpp

@@ -5133,7 +5133,7 @@ static ExprResult CheckConvertedConstantExpression(Sema &S, Expr *From,
                                                    QualType T, APValue &Value,
                                                    Sema::CCEKind CCE,
                                                    bool RequireInt) {
-  assert(S.getLangOpts().CPlusPlus11 || S.getLangOpts().HLSL2017 &&
+  assert(S.getLangOpts().CPlusPlus11 || S.getLangOpts().HLSLVersion >= 2017 &&
          "converted constant expression outside C++11");
 
   if (checkPlaceholderForOverload(S, From))

+ 2 - 2
tools/clang/lib/Sema/SemaStmt.cpp

@@ -392,7 +392,7 @@ Sema::ActOnCaseStmt(SourceLocation CaseLoc, Expr *LHSVal,
     return StmtError();
   LHSVal = LHS.get();
 
-  if (!getLangOpts().CPlusPlus11 && !getLangOpts().HLSL2017) {
+  if (!getLangOpts().CPlusPlus11 && getLangOpts().HLSLVersion < 2017) {
     // C99 6.8.4.2p3: The expression shall be an integer constant.
     // However, GCC allows any evaluatable integer expression.
     if (!LHSVal->isTypeDependent() && !LHSVal->isValueDependent()) {
@@ -860,7 +860,7 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch,
 
       llvm::APSInt LoVal;
 
-      if (getLangOpts().CPlusPlus11 || getLangOpts().HLSL2017) {
+      if (getLangOpts().CPlusPlus11 || getLangOpts().HLSLVersion >= 2017) {
         // C++11 [stmt.switch]p2: the constant-expression shall be a converted
         // constant expression of the promoted type of the switch condition.
         ExprResult ConvLo =

+ 1 - 1
tools/clang/test/CodeGenHLSL/cbufferHalf-struct.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_2 -no-min-precision %s | FileCheck %s
+// RUN: %dxc -E main -T ps_6_2 -enable-16bit-types %s | FileCheck %s
 
 // CHECK: Use native low precision
 // CHECK:   struct struct.Foo

+ 1 - 1
tools/clang/test/CodeGenHLSL/cbufferHalf.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_2 -no-min-precision %s | FileCheck %s
+// RUN: %dxc -E main -T ps_6_2 -enable-16bit-types %s | FileCheck %s
 
 // CHECK: Use native low precision
 // CHECK: cbuffer Foo

+ 1 - 1
tools/clang/test/CodeGenHLSL/cbufferInt16-struct.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_2 -no-min-precision %s | FileCheck %s
+// RUN: %dxc -E main -T ps_6_2 -enable-16bit-types -HV 2018 %s | FileCheck %s
 
 // CHECK: Use native low precision
 // CHECK:   struct struct.Foo

+ 1 - 1
tools/clang/test/CodeGenHLSL/cbufferInt16.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_2 -no-min-precision %s | FileCheck %s
+// RUN: %dxc -E main -T ps_6_2 -enable-16bit-types -HV 2018 %s | FileCheck %s
 
 // CHECK: Use native low precision
 // CHECK: cbuffer Foo

+ 1 - 1
tools/clang/test/CodeGenHLSL/dataLayoutHalf.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_2 -no-min-precision %s | FileCheck %s
+// RUN: %dxc -E main -T ps_6_2 -enable-16bit-types %s | FileCheck %s
 
 // CHECK: target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
 

+ 23 - 0
tools/clang/test/CodeGenHLSL/fixedWidth.hlsl

@@ -0,0 +1,23 @@
+// RUN: %dxc -E main -T ps_6_2 %s | FileCheck %s
+
+// CHECK: error: unknown type name 'int16_t'
+// CHECK: error: unknown type name 'int32_t'
+// CHECK: error: unknown type name 'uint16_t'
+// CHECK: error: unknown type name 'uint32_t'
+// CHECK: error: unknown type name 'float16_t'
+// CHECK: error: unknown type name 'float32_t'
+// CHECK: error: unknown type name 'float64_t'
+
+// int64_t/uint64_t already supported from 6.0
+
+float4 main(float col : COL) : SV_TARGET
+{
+    int16_t i0;
+    int32_t i1;
+    uint16_t i2;
+    uint32_t i3;
+    float16_t f0;
+    float32_t f1;
+    float64_t f2;
+    return col;
+}

+ 15 - 0
tools/clang/test/CodeGenHLSL/fixedWidth16Bit.hlsl

@@ -0,0 +1,15 @@
+// RUN: %dxc -E main -T ps_6_2 -HV 2018 %s | FileCheck %s
+
+// CHECK: int16_t is only supported with -enable-16bit-types option
+// CHECK: uint16_t is only supported with -enable-16bit-types option
+// CHECK: float16_t is only supported with -enable-16bit-types option
+
+// int64_t/uint64_t already supported from 6.0
+
+float4 main(float col : COL) : SV_TARGET
+{
+    int16_t i0;
+    uint16_t i2;
+    float16_t f0;
+    return col;
+}

+ 1 - 1
tools/clang/test/CodeGenHLSL/literals_exact_precision_Mod.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -no-min-precision -E test -T vs_6_2 %s
+// RUN: %dxc -enable-16bit-types -E test -T vs_6_2 %s
 
 // To test with the classic compiler, run
 // %sdxroot%\tools\x86\fxc.exe /T ps_5_1 literals.hlsl

+ 1 - 1
tools/clang/test/CodeGenHLSL/raw_buf5.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_2 -no-min-precision %s | FileCheck %s
+// RUN: %dxc -E main -T ps_6_2 -enable-16bit-types %s | FileCheck %s
 
 // CHECK: call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %buf1_texture_rawbuf, i32 %{{[0-9]+}}, i32 undef, i8 1, i32 4)
 // CHECK: call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %buf1_texture_rawbuf, i32 %{{[0-9]+}}, i32 undef, i8 3, i32 4)

+ 1 - 1
tools/clang/test/CodeGenHLSL/signature_packing_by_width.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_2 -no-min-precision %s | FileCheck %s
+// RUN: %dxc -E main -T ps_6_2 -enable-16bit-types -HV 2018 %s | FileCheck %s
 
 // TODO: Update this file when we introduce i8
 

+ 1 - 1
tools/clang/test/CodeGenHLSL/struct_buf4.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_2 -no-min-precision %s | FileCheck %s
+// RUN: %dxc -E main -T ps_6_2 -enable-16bit-types %s | FileCheck %s
 // CHECK: call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %buf1_texture_structbuf, i32 %{{[a-zA-Z0-9]+}}, i32 0, i8 1, i32 4)
 // CHECK: call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %buf1_texture_structbuf, i32 %{{[a-zA-Z0-9]+}}, i32 4, i8 3, i32 4)
 // CHECK: call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %buf1_texture_structbuf, i32 %{{[a-zA-Z0-9]+}}, i32 12, i8 7, i32 4)

+ 1 - 1
tools/clang/test/CodeGenHLSL/struct_buf5.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_2 -no-min-precision %s | FileCheck %s
+// RUN: %dxc -E main -T ps_6_2 -enable-16bit-types %s | FileCheck %s
 // CHECK: call %dx.types.ResRet.i16 @dx.op.rawBufferLoad.i16
 // CHECK: call %dx.types.ResRet.i16 @dx.op.rawBufferLoad.i16
 // CHECK: call %dx.types.ResRet.i16 @dx.op.rawBufferLoad.i16

+ 1 - 1
tools/clang/test/CodeGenHLSL/struct_buf_new_layout.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_2 -no-min-precision %s  | FileCheck %s
+// RUN: %dxc -E main -T ps_6_2 -enable-16bit-types -HV 2018 %s  | FileCheck %s
 
 struct MyStruct1
 {

+ 1 - 1
tools/clang/test/CodeGenHLSL/typed_buffer_half.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_2 -no-min-precision %s  | FileCheck %s
+// RUN: %dxc -E main -T ps_6_2 -enable-16bit-types %s  | FileCheck %s
 
 // CHECK: call void @dx.op.bufferStore.f16
 

+ 25 - 0
tools/clang/test/CodeGenHLSL/typedef_new_type.hlsl

@@ -0,0 +1,25 @@
+// RUN: %dxc -E main -T ps_6_0  %s | FileCheck %s
+
+// Checking that typedef for fixed width types for HLSL before 2018 works properly
+
+// CHECK: type { i32, i32, i32, i32, float, float, float }
+
+typedef uint uint16_t;
+typedef uint uint32_t;
+typedef int int16_t;
+typedef int int32_t;
+typedef float float16_t;
+typedef float float32_t;
+typedef float float64_t;
+
+uint16_t i1;
+uint32_t i2;
+int16_t i3;
+int32_t i4;
+float16_t f1;
+float32_t f2;
+float64_t f3;
+
+float4 main() : SV_Target {
+    return i1 + i2 + i3 + i4 + f1 + f2 + f3;
+}

+ 1 - 1
tools/clang/test/CodeGenHLSL/uav_typed_load_store3.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_2 -no-min-precision %s | FileCheck %s
+// RUN: %dxc -E main -T ps_6_2 -enable-16bit-types %s | FileCheck %s
 
 // CHECK: call %dx.types.ResRet.f32 @dx.op.textureLoad.f32
 // CHECK: call i1 @dx.op.checkAccessFullyMapped.i32

+ 4 - 4
tools/clang/test/HLSL/ShaderOpArith.xml

@@ -456,7 +456,7 @@
       <RenderTarget Name="RTarget" />
     </RenderTargets>
 
-    <Shader Name="VS" Target="vs_6_2" Arguments="/no-min-precision">
+    <Shader Name="VS" Target="vs_6_2" Arguments="/enable-16bit-types">
     <!--<Shader Name="VS" Target="vs_6_0"> -->
     <![CDATA[
     struct PSInput {
@@ -474,7 +474,7 @@
     ]]>
     </Shader>
 
-    <Shader Name="PS" Target="ps_6_2" Arguments="/no-min-precision">
+    <Shader Name="PS" Target="ps_6_2" Arguments="/enable-16bit-types">
     <!--<Shader Name="PS" Target="ps_6_0">-->
     <![CDATA[
     struct PSInput {
@@ -510,8 +510,8 @@
     <RenderTargets>
       <RenderTarget Name="RTarget" />
     </RenderTargets>
-    <Shader Name='VS' Target='vs_6_2' EntryPoint='VSMain' Arguments='-no-min-precision' Text="@PS" />
-    <Shader Name='PS' Target='ps_6_2' EntryPoint='PSMain' Arguments='-no-min-precision'>
+    <Shader Name='VS' Target='vs_6_2' EntryPoint='VSMain' Arguments='-enable-16bit-types' Text="@PS" />
+    <Shader Name='PS' Target='ps_6_2' EntryPoint='PSMain' Arguments='-enable-16bit-types'>
       <![CDATA[
         cbuffer c_buf {
           half first;

+ 1 - 1
tools/clang/test/HLSL/enums.hlsl

@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -HV -2017 -fsyntax-only -ffreestanding -verify %s
+// RUN: %clang_cc1 -HV 2017 -fsyntax-only -ffreestanding -verify %s
 
 enum MyEnum {
     ZERO,

+ 55 - 13
tools/clang/test/HLSL/matrix-syntax-exact-precision.hlsl

@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -no-min-precision -fsyntax-only -ffreestanding -verify %s
+// RUN: %clang_cc1 -enable-16bit-types -fsyntax-only -ffreestanding -verify -HV 2018 %s
 
 
 // To test with the classic compiler, run
@@ -61,20 +61,23 @@ void matrix_out_of_bounds() {
 
 void matrix_unsigned() {
    unsigned int4x2 intMatrix;
-   unsigned min16int4x3 min16Matrix; /* expected-warning {{min16int is promoted to int}} */
-   unsigned int64_t3x3 int64Matrix;
-   unsigned uint3x4 uintMatrix;
-   unsigned min16uint4x1 min16uintMatrix;                   /* expected-warning {{min16uint is promoted to uint}} */
-   unsigned uint64_t2x2 int64uintMatrix;
-   unsigned dword3x2 dwordvector; /* fxc-error {{X3000: unrecognized identifier 'dword3x1'}} */
+   unsigned min16int4x3 min16Matrix; /* expected-warning {{min16int is promoted to int16_t}} fxc-error {{X3085: unsigned can not be used with type}} */
+   unsigned int64_t3x3 int64Matrix;  /* fxc-error {{X3000: syntax error: unexpected token 'int64_t3x3'}} */
+   unsigned uint3x4 uintMatrix;      /* fxc-error {{X3085: unsigned can not be used with type}} */
+   unsigned min16uint4x1 min16uintMatrix;                   /* expected-warning {{min16uint is promoted to uint16_t}} fxc-error {{X3085: unsigned can not be used with type}} */
+   unsigned uint64_t2x2 int64uintMatrix;                    /* fxc-error {{X3000: syntax error: unexpected token 'uint64_t2x2'}} */
+   unsigned dword3x2 dwordmector; /* fxc-error {{X3000: syntax error: unexpected token 'dword3x2'}} */
 
    unsigned float2x3 floatMatrix; /* expected-error {{'float' cannot be signed or unsigned}} fxc-error {{X3085: unsigned can not be used with type}} */
-   unsigned bool3x4 boolvector;   /* expected-error {{'bool' cannot be signed or unsigned}} fxc-error {{X3085: unsigned can not be used with type}} */
-   unsigned half4x1 halfvector;   /* expected-error {{'half' cannot be signed or unsigned}} fxc-error {{X3085: unsigned can not be used with type}} */
-   unsigned double1x2 doublevector;                           /* expected-error {{'double' cannot be signed or unsigned}} fxc-error {{X3085: unsigned can not be used with type}} */
-   unsigned min12int2x3 min12intvector;                       /* expected-warning {{min12int is promoted to min16int}} fxc-error {{X3085: unsigned can not be used with type}} */
-   unsigned min16float3x4 min16floatvector;                   /* expected-error {{'half' cannot be signed or unsigned}} expected-warning {{min16float is promoted to half}} fxc-error {{X3085: unsigned can not be used with type}} */
-
+   unsigned bool3x4 boolMatirx;   /* expected-error {{'bool' cannot be signed or unsigned}} fxc-error {{X3085: unsigned can not be used with type}} */
+   unsigned half4x1 halfMatrix;   /* expected-error {{'half' cannot be signed or unsigned}} fxc-error {{X3085: unsigned can not be used with type}} */
+   unsigned double1x2 doubleMatrix;                           /* expected-error {{'double' cannot be signed or unsigned}} fxc-error {{X3085: unsigned can not be used with type}} */
+   unsigned min12int2x3 min12intMatrix;                       /* expected-warning {{min12int is promoted to int16_t}} fxc-error {{X3085: unsigned can not be used with type}} */
+   unsigned min16float3x4 min16floatMatrix;                   /* expected-error {{'half' cannot be signed or unsigned}} expected-warning {{min16float is promoted to float16_t}} fxc-error {{X3085: unsigned can not be used with type}} */
+
+   unsigned int16_t2x3 uint16_tMatrix1;                       /* fxc-error {{X3000: syntax error: unexpected token 'int16_t2x3'}} */
+   unsigned int32_t4x2 uint32_tMatrix1;                       /* fxc-error {{X3000: syntax error: unexpected token 'int32_t4x2'}} */
+   unsigned int64_t1x4 uint64_tMatrix1;                       /* fxc-error {{X3000: syntax error: unexpected token 'int64_t1x4'}} */
 }
 
 void main() {
@@ -157,4 +160,43 @@ void main() {
     myConstMatrix[0][0] = 3;                                /* expected-error {{cannot assign to variable 'myConstMatrix' with const-qualified type 'const matrix<float, 4, 4>'}} fxc-error {{X3025: l-value specifies const object}} */
     myConstMatrix[3] = float4(1,2,3,4);                     /* expected-error {{cannot assign to variable 'myConstMatrix' with const-qualified type 'const matrix<float, 4, 4>'}} fxc-error {{X3025: l-value specifies const object}} */
 
+    // vector for fixed width data types
+    int16_t1x3 int16_t1x3Matrix1 = 0;                       /* fxc-error {{X3000: unrecognized identifier 'int16_t1x3'}} fxc-error {{X3000: unrecognized identifier 'int16_t1x3Matrix1'}} */
+    int16_t2x4 int16_t1x3Matrix2 = 1;                       /* fxc-error {{X3000: unrecognized identifier 'int16_t1x3Matrix2'}} fxc-error {{X3000: unrecognized identifier 'int16_t2x4'}} */
+    int16_t3x2 int16_t1x3Matrix3 = 2;                       /* fxc-error {{X3000: unrecognized identifier 'int16_t1x3Matrix3'}} fxc-error {{X3000: unrecognized identifier 'int16_t3x2'}} */
+    int16_t4x2 int16_t1x3Matrix4 = 3;                       /* fxc-error {{X3000: unrecognized identifier 'int16_t1x3Matrix4'}} fxc-error {{X3000: unrecognized identifier 'int16_t4x2'}} */
+    int32_t1x3 int32_t1Matrix1 = 4;                         /* fxc-error {{X3000: unrecognized identifier 'int32_t1Matrix1'}} fxc-error {{X3000: unrecognized identifier 'int32_t1x3'}} */
+    int32_t2x2 int32_t1Matrix2 = 5;                         /* fxc-error {{X3000: unrecognized identifier 'int32_t1Matrix2'}} fxc-error {{X3000: unrecognized identifier 'int32_t2x2'}} */
+    int32_t3x4 int32_t1Matrix3 = 6;                         /* fxc-error {{X3000: unrecognized identifier 'int32_t1Matrix3'}} fxc-error {{X3000: unrecognized identifier 'int32_t3x4'}} */
+    int32_t4x1 int32_t1Matrix4 = 7;                         /* fxc-error {{X3000: unrecognized identifier 'int32_t1Matrix4'}} fxc-error {{X3000: unrecognized identifier 'int32_t4x1'}} */
+    int64_t1x2 int64_t1Matrix1 = 8;                         /* fxc-error {{X3000: unrecognized identifier 'int64_t1Matrix1'}} fxc-error {{X3000: unrecognized identifier 'int64_t1x2'}} */
+    int64_t2x3 int64_t1Matrix2 = 9;                         /* fxc-error {{X3000: unrecognized identifier 'int64_t1Matrix2'}} fxc-error {{X3000: unrecognized identifier 'int64_t2x3'}} */
+    int64_t3x3 int64_t1Matrix3 = 10;                        /* fxc-error {{X3000: unrecognized identifier 'int64_t1Matrix3'}} fxc-error {{X3000: unrecognized identifier 'int64_t3x3'}} */
+    int64_t4x4 int64_t1Matrix4 = 11;                        /* fxc-error {{X3000: unrecognized identifier 'int64_t1Matrix4'}} fxc-error {{X3000: unrecognized identifier 'int64_t4x4'}} */
+
+    uint16_t1x3 uint16_t1x3Matrix1 = 0;                     /* fxc-error {{X3000: unrecognized identifier 'uint16_t1x3'}} fxc-error {{X3000: unrecognized identifier 'uint16_t1x3Matrix1'}} */
+    uint16_t2x4 uint16_t1x3Matrix2 = 1;                     /* fxc-error {{X3000: unrecognized identifier 'uint16_t1x3Matrix2'}} fxc-error {{X3000: unrecognized identifier 'uint16_t2x4'}} */
+    uint16_t3x2 uint16_t1x3Matrix3 = 2;                     /* fxc-error {{X3000: unrecognized identifier 'uint16_t1x3Matrix3'}} fxc-error {{X3000: unrecognized identifier 'uint16_t3x2'}} */
+    uint16_t4x2 uint16_t1x3Matrix4 = 3;                     /* fxc-error {{X3000: unrecognized identifier 'uint16_t1x3Matrix4'}} fxc-error {{X3000: unrecognized identifier 'uint16_t4x2'}} */
+    uint32_t1x3 uint32_t1Matrix1 = 4;                       /* fxc-error {{X3000: unrecognized identifier 'uint32_t1Matrix1'}} fxc-error {{X3000: unrecognized identifier 'uint32_t1x3'}} */
+    uint32_t2x2 uint32_t1Matrix2 = 5;                       /* fxc-error {{X3000: unrecognized identifier 'uint32_t1Matrix2'}} fxc-error {{X3000: unrecognized identifier 'uint32_t2x2'}} */
+    uint32_t3x4 uint32_t1Matrix3 = 6;                       /* fxc-error {{X3000: unrecognized identifier 'uint32_t1Matrix3'}} fxc-error {{X3000: unrecognized identifier 'uint32_t3x4'}} */
+    uint32_t4x1 uint32_t1Matrix4 = 7;                       /* fxc-error {{X3000: unrecognized identifier 'uint32_t1Matrix4'}} fxc-error {{X3000: unrecognized identifier 'uint32_t4x1'}} */
+    uint64_t1x2 uint64_t1Matrix1 = 8;                       /* fxc-error {{X3000: unrecognized identifier 'uint64_t1Matrix1'}} fxc-error {{X3000: unrecognized identifier 'uint64_t1x2'}} */
+    uint64_t2x3 uint64_t1Matrix2 = 9;                       /* fxc-error {{X3000: unrecognized identifier 'uint64_t1Matrix2'}} fxc-error {{X3000: unrecognized identifier 'uint64_t2x3'}} */
+    uint64_t3x3 uint64_t1Matrix3 = 10;                      /* fxc-error {{X3000: unrecognized identifier 'uint64_t1Matrix3'}} fxc-error {{X3000: unrecognized identifier 'uint64_t3x3'}} */
+    uint64_t4x4 uint64_t1Matrix4 = 11;                      /* fxc-error {{X3000: unrecognized identifier 'uint64_t1Matrix4'}} fxc-error {{X3000: unrecognized identifier 'uint64_t4x4'}} */
+
+    float16_t1x3 float16_t1x3Matrix1 = 0;                   /* fxc-error {{X3000: unrecognized identifier 'float16_t1x3'}} fxc-error {{X3000: unrecognized identifier 'float16_t1x3Matrix1'}} */
+    float16_t2x4 float16_t1x3Matrix2 = 1;                   /* fxc-error {{X3000: unrecognized identifier 'float16_t1x3Matrix2'}} fxc-error {{X3000: unrecognized identifier 'float16_t2x4'}} */
+    float16_t3x2 float16_t1x3Matrix3 = 2;                   /* fxc-error {{X3000: unrecognized identifier 'float16_t1x3Matrix3'}} fxc-error {{X3000: unrecognized identifier 'float16_t3x2'}} */
+    float16_t4x2 float16_t1x3Matrix4 = 3;                   /* fxc-error {{X3000: unrecognized identifier 'float16_t1x3Matrix4'}} fxc-error {{X3000: unrecognized identifier 'float16_t4x2'}} */
+    float32_t1x3 float32_t1Matrix1 = 4;                     /* fxc-error {{X3000: unrecognized identifier 'float32_t1Matrix1'}} fxc-error {{X3000: unrecognized identifier 'float32_t1x3'}} */
+    float32_t2x2 float32_t1Matrix2 = 5;                     /* fxc-error {{X3000: unrecognized identifier 'float32_t1Matrix2'}} fxc-error {{X3000: unrecognized identifier 'float32_t2x2'}} */
+    float32_t3x4 float32_t1Matrix3 = 6;                     /* fxc-error {{X3000: unrecognized identifier 'float32_t1Matrix3'}} fxc-error {{X3000: unrecognized identifier 'float32_t3x4'}} */
+    float32_t4x1 float32_t1Matrix4 = 7;                     /* fxc-error {{X3000: unrecognized identifier 'float32_t1Matrix4'}} fxc-error {{X3000: unrecognized identifier 'float32_t4x1'}} */
+    float64_t1x2 float64_t1Matrix1 = 8;                     /* fxc-error {{X3000: unrecognized identifier 'float64_t1Matrix1'}} fxc-error {{X3000: unrecognized identifier 'float64_t1x2'}} */
+    float64_t2x3 float64_t1Matrix2 = 9;                     /* fxc-error {{X3000: unrecognized identifier 'float64_t1Matrix2'}} fxc-error {{X3000: unrecognized identifier 'float64_t2x3'}} */
+    float64_t3x3 float64_t1Matrix3 = 10;                    /* fxc-error {{X3000: unrecognized identifier 'float64_t1Matrix3'}} fxc-error {{X3000: unrecognized identifier 'float64_t3x3'}} */
+    float64_t4x4 float64_t1Matrix4 = 11;                    /* fxc-error {{X3000: unrecognized identifier 'float64_t1Matrix4'}} fxc-error {{X3000: unrecognized identifier 'float64_t4x4'}} */
 }

+ 314 - 157
tools/clang/test/HLSL/scalar-assignments-exact-precision.hlsl

@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -no-min-precision -fsyntax-only -ffreestanding -verify %s
+// RUN: %clang_cc1 -enable-16bit-types -fsyntax-only -ffreestanding -verify -HV 2018 %s
 
 // To test with the classic compiler, run
 // %sdxroot%\tools\x86\fxc.exe /T vs_5_1 scalar-assignments.hlsl
@@ -12,7 +12,7 @@ snorm bool sb;         // expected-error {{snorm and unorm qualifier can only be
 
 // Used to generate this undesirable error:
 // cannot initialize a variable of type 'min16float' (aka 'half') with an lvalue of type 'const char [4]'
-min16float foobar = "foo"; // expected-error {{cannot initialize a variable of type 'min16float' with an lvalue of type 'const char [4]'}} expected-warning {{min16float is promoted to half}} fxc-error {{X3017: cannot implicitly convert from 'const string' to 'min16float'}}
+min16float foobar = "foo"; // expected-error {{cannot initialize a variable of type 'min16float' with an lvalue of type 'const char [4]'}} expected-warning {{min16float is promoted to float16_t}} fxc-error {{X3017: cannot implicitly convert from 'const string' to 'min16float'}}
 
 /*
 (let (
@@ -37,11 +37,11 @@ bool left3; dword right3; left3 = right3;
 bool left4; half right4; left4 = right4;
 bool left5; float right5; left5 = right5;
 bool left6; double right6; left6 = right6;
-bool left7; min16float right7; left7 = right7;              /* expected-warning {{min16float is promoted to half}} */
-bool left8; min10float right8; left8 = right8;  // expected-warning {{min10float is promoted to half}}
-bool left9; min16int right9; left9 = right9;    /* expected-warning {{min16int is promoted to int}} */
-bool left10; min12int right10; left10 = right10;  // expected-warning {{min12int is promoted to min16int}}
-bool left11; min16uint right11; left11 = right11; /* expected-warning {{min16uint is promoted to uint}} */
+bool left7; min16float right7; left7 = right7;              /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+bool left8; min10float right8; left8 = right8;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+bool left9; min16int right9; left9 = right9;    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+bool left10; min12int right10; left10 = right10;  // expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}}
+bool left11; min16uint right11; left11 = right11; /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
 int left12; bool right12; left12 = right12;
 int left13; int right13; left13 = right13;
 int left14; uint right14; left14 = right14;
@@ -49,11 +49,11 @@ int left15; dword right15; left15 = right15;
 int left16; half right16; left16 = right16;
 int left17; float right17; left17 = right17;
 int left18; double right18; left18 = right18; // expected-warning {{conversion from larger type 'double' to smaller type 'int', possible loss of data}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-int left19; min16float right19; left19 = right19;           /* expected-warning {{min16float is promoted to half}} */
-int left20; min10float right20; left20 = right20;  // expected-warning {{min10float is promoted to half}}
-int left21; min16int right21; left21 = right21;    /* expected-warning {{min16int is promoted to int}} */
-int left22; min12int right22; left22 = right22;  // expected-warning {{min12int is promoted to min16int}}
-int left23; min16uint right23; left23 = right23; /* expected-warning {{min16uint is promoted to uint}} */
+int left19; min16float right19; left19 = right19;           /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+int left20; min10float right20; left20 = right20;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+int left21; min16int right21; left21 = right21;    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+int left22; min12int right22; left22 = right22;  // expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}}
+int left23; min16uint right23; left23 = right23; /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
 uint left24; bool right24; left24 = right24;
 uint left25; int right25; left25 = right25;
 uint left26; uint right26; left26 = right26;
@@ -61,11 +61,11 @@ uint left27; dword right27; left27 = right27;
 uint left28; half right28; left28 = right28;
 uint left29; float right29; left29 = right29;
 uint left30; double right30; left30 = right30; // expected-warning {{conversion from larger type 'double' to smaller type 'uint', possible loss of data}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-uint left31; min16float right31; left31 = right31;          /* expected-warning {{min16float is promoted to half}} */
-uint left32; min10float right32; left32 = right32;  // expected-warning {{min10float is promoted to half}}
-uint left33; min16int right33; left33 = right33;    /* expected-warning {{min16int is promoted to int}} */
-uint left34; min12int right34; left34 = right34;  // expected-warning {{min12int is promoted to min16int}}
-uint left35; min16uint right35; left35 = right35; /* expected-warning {{min16uint is promoted to uint}} */
+uint left31; min16float right31; left31 = right31;          /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+uint left32; min10float right32; left32 = right32;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+uint left33; min16int right33; left33 = right33;    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+uint left34; min12int right34; left34 = right34;  // expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}}
+uint left35; min16uint right35; left35 = right35; /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
 dword left36; bool right36; left36 = right36;
 dword left37; int right37; left37 = right37;
 dword left38; uint right38; left38 = right38;
@@ -73,23 +73,23 @@ dword left39; dword right39; left39 = right39;
 dword left40; half right40; left40 = right40;
 dword left41; float right41; left41 = right41;
 dword left42; double right42; left42 = right42; // expected-warning {{conversion from larger type 'double' to smaller type 'dword', possible loss of data}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-dword left43; min16float right43; left43 = right43;         /* expected-warning {{min16float is promoted to half}} */
-dword left44; min10float right44; left44 = right44;  // expected-warning {{min10float is promoted to half}}
-dword left45; min16int right45; left45 = right45;    /* expected-warning {{min16int is promoted to int}} */
-dword left46; min12int right46; left46 = right46;  // expected-warning {{min12int is promoted to min16int}}
-dword left47; min16uint right47; left47 = right47; /* expected-warning {{min16uint is promoted to uint}} */
+dword left43; min16float right43; left43 = right43;         /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+dword left44; min10float right44; left44 = right44;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+dword left45; min16int right45; left45 = right45;    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+dword left46; min12int right46; left46 = right46;  // expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}}
+dword left47; min16uint right47; left47 = right47; /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
 half left48; bool right48; left48 = right48;
-half left49; int right49; left49 = right49;        /* expected-warning {{conversion from larger type 'int' to smaller type 'half', possible loss of data}} */
-half left50; uint right50; left50 = right50;       /* expected-warning {{conversion from larger type 'uint' to smaller type 'half', possible loss of data}} */
-half left51; dword right51; left51 = right51;      /* expected-warning {{conversion from larger type 'dword' to smaller type 'half', possible loss of data}} */
+half left49; int right49; left49 = right49;        /* expected-warning {{conversion from larger type 'int' to smaller type 'half', possible loss of data}} fxc-pass {{}} */
+half left50; uint right50; left50 = right50;       /* expected-warning {{conversion from larger type 'uint' to smaller type 'half', possible loss of data}} fxc-pass {{}} */
+half left51; dword right51; left51 = right51;      /* expected-warning {{conversion from larger type 'dword' to smaller type 'half', possible loss of data}} fxc-pass {{}} */
 half left52; half right52; left52 = right52;
-half left53; float right53; left53 = right53;      /* expected-warning {{conversion from larger type 'float' to smaller type 'half', possible loss of data}} */
+half left53; float right53; left53 = right53;      /* expected-warning {{conversion from larger type 'float' to smaller type 'half', possible loss of data}} fxc-pass {{}} */
 half left54; double right54; left54 = right54; // expected-warning {{conversion from larger type 'double' to smaller type 'half', possible loss of data}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-half left55; min16float right55; left55 = right55;          /* expected-warning {{min16float is promoted to half}} */
-half left56; min10float right56; left56 = right56;  // expected-warning {{min10float is promoted to half}}
-half left57; min16int right57; left57 = right57;    /* expected-warning {{min16int is promoted to int}} */
-half left58; min12int right58; left58 = right58;  // expected-warning {{min12int is promoted to min16int}}
-half left59; min16uint right59; left59 = right59; /* expected-warning {{min16uint is promoted to uint}} */
+half left55; min16float right55; left55 = right55;          /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+half left56; min10float right56; left56 = right56;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+half left57; min16int right57; left57 = right57;    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+half left58; min12int right58; left58 = right58;  // expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}}
+half left59; min16uint right59; left59 = right59; /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
 float left60; bool right60; left60 = right60;
 float left61; int right61; left61 = right61;
 float left62; uint right62; left62 = right62;
@@ -97,11 +97,11 @@ float left63; dword right63; left63 = right63;
 float left64; half right64; left64 = right64;
 float left65; float right65; left65 = right65;
 float left66; double right66; left66 = right66; // expected-warning {{conversion from larger type 'double' to smaller type 'float', possible loss of data}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-float left67; min16float right67; left67 = right67;         /* expected-warning {{min16float is promoted to half}} */
-float left68; min10float right68; left68 = right68;  // expected-warning {{min10float is promoted to half}}
-float left69; min16int right69; left69 = right69;    /* expected-warning {{min16int is promoted to int}} */
-float left70; min12int right70; left70 = right70;  // expected-warning {{min12int is promoted to min16int}}
-float left71; min16uint right71; left71 = right71; /* expected-warning {{min16uint is promoted to uint}} */
+float left67; min16float right67; left67 = right67;         /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+float left68; min10float right68; left68 = right68;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+float left69; min16int right69; left69 = right69;    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+float left70; min12int right70; left70 = right70;  // expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}}
+float left71; min16uint right71; left71 = right71; /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
 double left72; bool right72; left72 = right72;
 double left73; int right73; left73 = right73;
 double left74; uint right74; left74 = right74;
@@ -109,71 +109,228 @@ double left75; dword right75; left75 = right75;
 double left76; half right76; left76 = right76;
 double left77; float right77; left77 = right77;
 double left78; double right78; left78 = right78;
-double left79; min16float right79; left79 = right79;        /* expected-warning {{min16float is promoted to half}} */
-double left80; min10float right80; left80 = right80;  // expected-warning {{min10float is promoted to half}}
-double left81; min16int right81; left81 = right81;    /* expected-warning {{min16int is promoted to int}} */
-double left82; min12int right82; left82 = right82;  // expected-warning {{min12int is promoted to min16int}}
-double left83; min16uint right83; left83 = right83; /* expected-warning {{min16uint is promoted to uint}} */
-min16float left84; bool right84; left84 = right84;  /* expected-warning {{min16float is promoted to half}} */
-min16float left85; int right85; left85 = right85; // expected-warning {{conversion from larger type 'int' to smaller type 'min16float', possible loss of data}} expected-warning {{min16float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16float left86; uint right86; left86 = right86; // expected-warning {{conversion from larger type 'uint' to smaller type 'min16float', possible loss of data}} expected-warning {{min16float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16float left87; dword right87; left87 = right87; // expected-warning {{conversion from larger type 'dword' to smaller type 'min16float', possible loss of data}} expected-warning {{min16float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16float left88; half right88; left88 = right88; // expected-warning {{min16float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16float left89; float right89; left89 = right89; // expected-warning {{conversion from larger type 'float' to smaller type 'min16float', possible loss of data}} expected-warning {{min16float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16float left90; double right90; left90 = right90; // expected-warning {{conversion from larger type 'double' to smaller type 'min16float', possible loss of data}} expected-warning {{min16float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16float left91; min16float right91; left91 = right91;    /* expected-warning {{min16float is promoted to half}} expected-warning {{min16float is promoted to half}} */
-min16float left92; min10float right92; left92 = right92;  // expected-warning {{min10float is promoted to half}} expected-warning {{min16float is promoted to half}}
-min16float left93; min16int right93; left93 = right93;    /* expected-warning {{min16float is promoted to half}} expected-warning {{min16int is promoted to int}} */
-min16float left94; min12int right94; left94 = right94;  // expected-warning {{min12int is promoted to min16int}} expected-warning {{min16float is promoted to half}}
-min16float left95; min16uint right95; left95 = right95; /* expected-warning {{min16float is promoted to half}} expected-warning {{min16uint is promoted to uint}} */
-min10float left96; bool right96; left96 = right96;  // expected-warning {{min10float is promoted to half}}
-min10float left97; int right97; left97 = right97; // expected-warning {{conversion from larger type 'int' to smaller type 'min10float', possible loss of data}} expected-warning {{min10float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min10float left98; uint right98; left98 = right98; // expected-warning {{conversion from larger type 'uint' to smaller type 'min10float', possible loss of data}} expected-warning {{min10float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min10float left99; dword right99; left99 = right99; // expected-warning {{conversion from larger type 'dword' to smaller type 'min10float', possible loss of data}} expected-warning {{min10float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min10float left100; half right100; left100 = right100; // expected-warning {{min10float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min10float left101; float right101; left101 = right101; // expected-warning {{conversion from larger type 'float' to smaller type 'min10float', possible loss of data}} expected-warning {{min10float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min10float left102; double right102; left102 = right102; // expected-warning {{conversion from larger type 'double' to smaller type 'min10float', possible loss of data}} expected-warning {{min10float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min10float left103; min16float right103; left103 = right103; // expected-warning {{min10float is promoted to half}} expected-warning {{min16float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min10float left104; min10float right104; left104 = right104;  // expected-warning {{min10float is promoted to half}} expected-warning {{min10float is promoted to half}} //
-min10float left105; min16int right105; left105 = right105; // expected-warning {{min10float is promoted to half}} expected-warning {{min16int is promoted to int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min10float left106; min12int right106; left106 = right106; // expected-warning {{min10float is promoted to half}} expected-warning {{min12int is promoted to min16int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min10float left107; min16uint right107; left107 = right107; // expected-warning {{min10float is promoted to half}} expected-warning {{min16uint is promoted to uint}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min16int left108; bool right108; left108 = right108;        /* expected-warning {{min16int is promoted to int}} */
-min16int left109; int right109; left109 = right109; // expected-warning {{conversion from larger type 'int' to smaller type 'min16int', possible loss of data}} expected-warning {{min16int is promoted to int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16int left110; uint right110; left110 = right110; // expected-warning {{conversion from larger type 'uint' to smaller type 'min16int', possible loss of data}} expected-warning {{min16int is promoted to int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16int left111; dword right111; left111 = right111; // expected-warning {{conversion from larger type 'dword' to smaller type 'min16int', possible loss of data}} expected-warning {{min16int is promoted to int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16int left112; half right112; left112 = right112; // expected-warning {{min16int is promoted to int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16int left113; float right113; left113 = right113; // expected-warning {{conversion from larger type 'float' to smaller type 'min16int', possible loss of data}} expected-warning {{min16int is promoted to int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16int left114; double right114; left114 = right114; // expected-warning {{conversion from larger type 'double' to smaller type 'min16int', possible loss of data}} expected-warning {{min16int is promoted to int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16int left115; min16float right115; left115 = right115;    /* expected-warning {{min16float is promoted to half}} expected-warning {{min16int is promoted to int}} */
-min16int left116; min10float right116; left116 = right116;  // expected-warning {{min10float is promoted to half}} expected-warning {{min16int is promoted to int}}
-min16int left117; min16int right117; left117 = right117;    /* expected-warning {{min16int is promoted to int}} expected-warning {{min16int is promoted to int}} */
-min16int left118; min12int right118; left118 = right118;  // expected-warning {{min12int is promoted to min16int}} expected-warning {{min16int is promoted to int}}
-min16int left119; min16uint right119; left119 = right119; /* expected-warning {{min16int is promoted to int}} expected-warning {{min16uint is promoted to uint}} */
-min12int left120; bool right120; left120 = right120;  // expected-warning {{min12int is promoted to min16int}}
-min12int left121; int right121; left121 = right121; // expected-warning {{conversion from larger type 'int' to smaller type 'min12int', possible loss of data}} expected-warning {{min12int is promoted to min16int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min12int left122; uint right122; left122 = right122; // expected-warning {{conversion from larger type 'uint' to smaller type 'min12int', possible loss of data}} expected-warning {{min12int is promoted to min16int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min12int left123; dword right123; left123 = right123; // expected-warning {{conversion from larger type 'dword' to smaller type 'min12int', possible loss of data}} expected-warning {{min12int is promoted to min16int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min12int left124; half right124; left124 = right124; // expected-warning {{min12int is promoted to min16int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min12int left125; float right125; left125 = right125; // expected-warning {{conversion from larger type 'float' to smaller type 'min12int', possible loss of data}} expected-warning {{min12int is promoted to min16int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min12int left126; double right126; left126 = right126; // expected-warning {{conversion from larger type 'double' to smaller type 'min12int', possible loss of data}} expected-warning {{min12int is promoted to min16int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min12int left127; min16float right127; left127 = right127; // expected-warning {{min12int is promoted to min16int}} expected-warning {{min16float is promoted to half}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min12int left128; min10float right128; left128 = right128;  // expected-warning {{min10float is promoted to half}} expected-warning {{min12int is promoted to min16int}} //
-min12int left129; min16int right129; left129 = right129; // expected-warning {{min12int is promoted to min16int}} expected-warning {{min16int is promoted to int}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min12int left130; min12int right130; left130 = right130;  // expected-warning {{min12int is promoted to min16int}} expected-warning {{min12int is promoted to min16int}} //
-min12int left131; min16uint right131; left131 = right131; // expected-warning {{min12int is promoted to min16int}} expected-warning {{min16uint is promoted to uint}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
-min16uint left132; bool right132; left132 = right132;     /* expected-warning {{min16uint is promoted to uint}} */
-min16uint left133; int right133; left133 = right133; // expected-warning {{conversion from larger type 'int' to smaller type 'min16uint', possible loss of data}} expected-warning {{min16uint is promoted to uint}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16uint left134; uint right134; left134 = right134; // expected-warning {{conversion from larger type 'uint' to smaller type 'min16uint', possible loss of data}} expected-warning {{min16uint is promoted to uint}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16uint left135; dword right135; left135 = right135; // expected-warning {{conversion from larger type 'dword' to smaller type 'min16uint', possible loss of data}} expected-warning {{min16uint is promoted to uint}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16uint left136; half right136; left136 = right136; // expected-warning {{min16uint is promoted to uint}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16uint left137; float right137; left137 = right137; // expected-warning {{conversion from larger type 'float' to smaller type 'min16uint', possible loss of data}} expected-warning {{min16uint is promoted to uint}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16uint left138; double right138; left138 = right138; // expected-warning {{conversion from larger type 'double' to smaller type 'min16uint', possible loss of data}} expected-warning {{min16uint is promoted to uint}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-min16uint left139; min16float right139; left139 = right139;    /* expected-warning {{min16float is promoted to half}} expected-warning {{min16uint is promoted to uint}} */
-min16uint left140; min10float right140; left140 = right140;  // expected-warning {{min10float is promoted to half}} expected-warning {{min16uint is promoted to uint}}
-min16uint left141; min16int right141; left141 = right141;    /* expected-warning {{min16int is promoted to int}} expected-warning {{min16uint is promoted to uint}} */
-min16uint left142; min12int right142; left142 = right142;  // expected-warning {{min12int is promoted to min16int}} expected-warning {{min16uint is promoted to uint}}
-min16uint left143; min16uint right143; left143 = right143; /* expected-warning {{min16uint is promoted to uint}} expected-warning {{min16uint is promoted to uint}} */
+double left79; min16float right79; left79 = right79;        /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+double left80; min10float right80; left80 = right80;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+double left81; min16int right81; left81 = right81;    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+double left82; min12int right82; left82 = right82;  // expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}}
+double left83; min16uint right83; left83 = right83; /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+min16float left84; bool right84; left84 = right84;  /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+min16float left85; int right85; left85 = right85; // expected-warning {{conversion from larger type 'int' to smaller type 'min16float', possible loss of data}} expected-warning {{min16float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16float left86; uint right86; left86 = right86; // expected-warning {{conversion from larger type 'uint' to smaller type 'min16float', possible loss of data}} expected-warning {{min16float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16float left87; dword right87; left87 = right87; // expected-warning {{conversion from larger type 'dword' to smaller type 'min16float', possible loss of data}} expected-warning {{min16float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16float left88; half right88; left88 = right88; // expected-warning {{min16float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16float left89; float right89; left89 = right89; // expected-warning {{conversion from larger type 'float' to smaller type 'min16float', possible loss of data}} expected-warning {{min16float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16float left90; double right90; left90 = right90; // expected-warning {{conversion from larger type 'double' to smaller type 'min16float', possible loss of data}} expected-warning {{min16float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16float left91; min16float right91; left91 = right91;    /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+min16float left92; min10float right92; left92 = right92;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}}
+min16float left93; min16int right93; left93 = right93;    /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+min16float left94; min12int right94; left94 = right94;  // expected-warning {{min12int is promoted to int16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}}
+min16float left95; min16uint right95; left95 = right95; /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+min10float left96; bool right96; left96 = right96;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+min10float left97; int right97; left97 = right97; // expected-warning {{conversion from larger type 'int' to smaller type 'min10float', possible loss of data}} expected-warning {{min10float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min10float left98; uint right98; left98 = right98; // expected-warning {{conversion from larger type 'uint' to smaller type 'min10float', possible loss of data}} expected-warning {{min10float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min10float left99; dword right99; left99 = right99; // expected-warning {{conversion from larger type 'dword' to smaller type 'min10float', possible loss of data}} expected-warning {{min10float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min10float left100; half right100; left100 = right100; // expected-warning {{min10float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min10float left101; float right101; left101 = right101; // expected-warning {{conversion from larger type 'float' to smaller type 'min10float', possible loss of data}} expected-warning {{min10float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min10float left102; double right102; left102 = right102; // expected-warning {{conversion from larger type 'double' to smaller type 'min10float', possible loss of data}} expected-warning {{min10float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min10float left103; min16float right103; left103 = right103; // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min10float left104; min10float right104; left104 = right104;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} //
+min10float left105; min16int right105; left105 = right105; // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min10float left106; min12int right106; left106 = right106; // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min12int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min10float left107; min16uint right107; left107 = right107; // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16uint is promoted to uint16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min16int left108; bool right108; left108 = right108;        /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+min16int left109; int right109; left109 = right109; // expected-warning {{conversion from larger type 'int' to smaller type 'min16int', possible loss of data}} expected-warning {{min16int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16int left110; uint right110; left110 = right110; // expected-warning {{conversion from larger type 'uint' to smaller type 'min16int', possible loss of data}} expected-warning {{min16int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16int left111; dword right111; left111 = right111; // expected-warning {{conversion from larger type 'dword' to smaller type 'min16int', possible loss of data}} expected-warning {{min16int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16int left112; half right112; left112 = right112; // expected-warning {{min16int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16int left113; float right113; left113 = right113; // expected-warning {{conversion from larger type 'float' to smaller type 'min16int', possible loss of data}} expected-warning {{min16int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16int left114; double right114; left114 = right114; // expected-warning {{conversion from larger type 'double' to smaller type 'min16int', possible loss of data}} expected-warning {{min16int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16int left115; min16float right115; left115 = right115;    /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+min16int left116; min10float right116; left116 = right116;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}}
+min16int left117; min16int right117; left117 = right117;    /* expected-warning {{min16int is promoted to int16_t}} expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+min16int left118; min12int right118; left118 = right118;  // expected-warning {{min12int is promoted to int16_t}} expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}}
+min16int left119; min16uint right119; left119 = right119; /* expected-warning {{min16int is promoted to int16_t}} expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+min12int left120; bool right120; left120 = right120;  // expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}}
+min12int left121; int right121; left121 = right121; // expected-warning {{conversion from larger type 'int' to smaller type 'min12int', possible loss of data}} expected-warning {{min12int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min12int left122; uint right122; left122 = right122; // expected-warning {{conversion from larger type 'uint' to smaller type 'min12int', possible loss of data}} expected-warning {{min12int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min12int left123; dword right123; left123 = right123; // expected-warning {{conversion from larger type 'dword' to smaller type 'min12int', possible loss of data}} expected-warning {{min12int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min12int left124; half right124; left124 = right124; // expected-warning {{min12int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min12int left125; float right125; left125 = right125; // expected-warning {{conversion from larger type 'float' to smaller type 'min12int', possible loss of data}} expected-warning {{min12int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min12int left126; double right126; left126 = right126; // expected-warning {{conversion from larger type 'double' to smaller type 'min12int', possible loss of data}} expected-warning {{min12int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min12int left127; min16float right127; left127 = right127; // expected-warning {{min12int is promoted to int16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min12int left128; min10float right128; left128 = right128;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} //
+min12int left129; min16int right129; left129 = right129; // expected-warning {{min12int is promoted to int16_t}} expected-warning {{min16int is promoted to int16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min12int left130; min12int right130; left130 = right130;  // expected-warning {{min12int is promoted to int16_t}} expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} //
+min12int left131; min16uint right131; left131 = right131; // expected-warning {{min12int is promoted to int16_t}} expected-warning {{min16uint is promoted to uint16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} //
+min16uint left132; bool right132; left132 = right132;     /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+min16uint left133; int right133; left133 = right133; // expected-warning {{conversion from larger type 'int' to smaller type 'min16uint', possible loss of data}} expected-warning {{min16uint is promoted to uint16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16uint left134; uint right134; left134 = right134; // expected-warning {{conversion from larger type 'uint' to smaller type 'min16uint', possible loss of data}} expected-warning {{min16uint is promoted to uint16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16uint left135; dword right135; left135 = right135; // expected-warning {{conversion from larger type 'dword' to smaller type 'min16uint', possible loss of data}} expected-warning {{min16uint is promoted to uint16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16uint left136; half right136; left136 = right136; // expected-warning {{min16uint is promoted to uint16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16uint left137; float right137; left137 = right137; // expected-warning {{conversion from larger type 'float' to smaller type 'min16uint', possible loss of data}} expected-warning {{min16uint is promoted to uint16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16uint left138; double right138; left138 = right138; // expected-warning {{conversion from larger type 'double' to smaller type 'min16uint', possible loss of data}} expected-warning {{min16uint is promoted to uint16_t}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
+min16uint left139; min16float right139; left139 = right139;    /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+min16uint left140; min10float right140; left140 = right140;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}}
+min16uint left141; min16int right141; left141 = right141;    /* expected-warning {{min16int is promoted to int16_t}} expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+min16uint left142; min12int right142; left142 = right142;  // expected-warning {{min12int is promoted to int16_t}} expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}}
+min16uint left143; min16uint right143; left143 = right143; /* expected-warning {{min16uint is promoted to uint16_t}} expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+
+// new explicit size types
+int16_t left144; bool right144; left144 = right144;        /* fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left144'}} */
+int16_t left145; int right145; left145 = right145;         /* expected-warning {{conversion from larger type 'int' to smaller type 'int16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left145'}} */
+int16_t left146; uint right146; left146 = right146;        /* expected-warning {{conversion from larger type 'uint' to smaller type 'int16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left146'}} */
+int16_t left147; dword right147; left147 = right147;       /* expected-warning {{conversion from larger type 'dword' to smaller type 'int16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left147'}} */
+int16_t left148; half right148; left148 = right148;        /* fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left148'}} */
+int16_t left149; float right149; left149 = right149;       /* expected-warning {{conversion from larger type 'float' to smaller type 'int16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left149'}} */
+int16_t left150; double right150; left150 = right150;      /* expected-warning {{conversion from larger type 'double' to smaller type 'int16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left150'}} */
+int16_t left151; min16float right151; left151 = right151;  /* expected-warning {{min16float is promoted to float16_t}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left151'}} */
+int16_t left152; min10float right152; left152 = right152;  /* expected-warning {{min10float is promoted to float16_t}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left152'}} */
+int16_t left153; min16int right153; left153 = right153;    /* expected-warning {{min16int is promoted to int16_t}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left153'}} */
+int16_t left154; min12int right154; left154 = right154;    /* expected-warning {{min12int is promoted to int16_t}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left154'}} */
+int16_t left155; min16uint right155; left155 = right155;   /* expected-warning {{min16uint is promoted to uint16_t}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left155'}} */
+int16_t left156; int16_t right156; left156 = right156;     /* fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left156'}} */
+int16_t left157; int32_t right157; left157 = right157;     /* expected-warning {{conversion from larger type 'int32_t' to smaller type 'int16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left157'}} */
+int16_t left158; int64_t right158; left158 = right158;     /* expected-warning {{conversion from larger type 'int64_t' to smaller type 'int16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left158'}} */
+int16_t left159; float16_t right159; left159 = right159;   /* fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left159'}} */
+int16_t left160; float32_t right160; left160 = right160;   /* expected-warning {{conversion from larger type 'float32_t' to smaller type 'int16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left160'}} */
+int16_t left161; float64_t right161; left161 = right161;   /* expected-warning {{conversion from larger type 'float64_t' to smaller type 'int16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'left161'}} */
+
+int32_t left162; bool right162; left162 = right162;        /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left162'}} */
+int32_t left163; int right163; left163 = right163;         /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left163'}} */
+int32_t left165; uint right165; left165 = right165;        /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left165'}} */
+int32_t left167; dword right167; left167 = right167;       /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left167'}} */
+int32_t left168; half right168; left168 = right168;        /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left168'}} */
+int32_t left169; float right169; left169 = right169;       /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left169'}} */
+int32_t left170; double right170; left170 = right170;      /* expected-warning {{conversion from larger type 'double' to smaller type 'int32_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left170'}} */
+int32_t left171; min16float right171; left171 = right171;  /* expected-warning {{min16float is promoted to float16_t}} fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left171'}} */
+int32_t left172; min10float right172; left172 = right172;  /* expected-warning {{min10float is promoted to float16_t}} fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left172'}} */
+int32_t left173; min16int right173; left173 = right173;    /* expected-warning {{min16int is promoted to int16_t}} fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left173'}} */
+int32_t left174; min12int right174; left174 = right174;    /* expected-warning {{min12int is promoted to int16_t}} fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left174'}} */
+int32_t left175; min16uint right175; left175 = right175;   /* expected-warning {{min16uint is promoted to uint16_t}} fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left175'}} */
+int32_t left176; int16_t right176; left176 = right176;     /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left176'}} */
+int32_t left177; int32_t right177; left177 = right177;     /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left177'}} */
+int32_t left178; int64_t right178; left178 = right178;     /* expected-warning {{conversion from larger type 'int64_t' to smaller type 'int32_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left178'}} */
+int32_t left179; float16_t right179; left179 = right179;   /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left179'}} */
+int32_t left180; float32_t right180; left180 = right180;   /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left180'}} */
+int32_t left181; float64_t right181; left181 = right181;   /* expected-warning {{conversion from larger type 'float64_t' to smaller type 'int32_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'left181'}} */
+
+int64_t left182; bool right182; left182 = right182;        /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left182'}} */
+int64_t left183; int right183; left183 = right183;         /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left183'}} */
+int64_t left185; uint right185; left185 = right185;        /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left185'}} */
+int64_t left187; dword right187; left187 = right187;       /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left187'}} */
+int64_t left188; half right188; left188 = right188;        /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left188'}} */
+int64_t left189; float right189; left189 = right189;       /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left189'}} */
+int64_t left190; double right190; left190 = right190;      /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left190'}} */
+int64_t left191; min16float right191; left191 = right191;  /* expected-warning {{min16float is promoted to float16_t}} fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left191'}} */
+int64_t left192; min10float right192; left192 = right192;  /* expected-warning {{min10float is promoted to float16_t}} fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left192'}} */
+int64_t left193; min16int right193; left193 = right193;    /* expected-warning {{min16int is promoted to int16_t}} fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left193'}} */
+int64_t left194; min12int right194; left194 = right194;    /* expected-warning {{min12int is promoted to int16_t}} fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left194'}} */
+int64_t left195; min16uint right195; left195 = right195;   /* expected-warning {{min16uint is promoted to uint16_t}} fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left195'}} */
+int64_t left196; int16_t right196; left196 = right196;     /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left196'}} */
+int64_t left197; int32_t right197; left197 = right197;     /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left197'}} */
+int64_t left198; int64_t right198; left198 = right198;     /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left198'}} */
+int64_t left199; float16_t right199; left199 = right199;   /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left199'}} */
+int64_t left200; float32_t right200; left200 = right200;   /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left200'}} */
+int64_t left201; float64_t right201; left201 = right201;   /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'left201'}} */
+
+float16_t left202; bool right202; left202 = right202;      /* fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left202'}} */
+float16_t left203; int right203; left203 = right203;       /* expected-warning {{conversion from larger type 'int' to smaller type 'float16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left203'}} */
+float16_t left205; uint right205; left205 = right205;      /* expected-warning {{conversion from larger type 'uint' to smaller type 'float16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left205'}} */
+float16_t left207; dword right207; left207 = right207;     /* expected-warning {{conversion from larger type 'dword' to smaller type 'float16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left207'}} */
+float16_t left208; half right208; left208 = right208;      /* fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left208'}} */
+float16_t left209; float right209; left209 = right209;     /* expected-warning {{conversion from larger type 'float' to smaller type 'float16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left209'}} */
+float16_t left210; double right210; left210 = right210;    /* expected-warning {{conversion from larger type 'double' to smaller type 'float16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left210'}} */
+float16_t left211; min16float right211; left211 = right211;    /* expected-warning {{min16float is promoted to float16_t}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left211'}} */
+float16_t left212; min10float right212; left212 = right212;    /* expected-warning {{min10float is promoted to float16_t}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left212'}} */
+float16_t left213; min16int right213; left213 = right213;  /* expected-warning {{min16int is promoted to int16_t}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left213'}} */
+float16_t left214; min12int right214; left214 = right214;  /* expected-warning {{min12int is promoted to int16_t}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left214'}} */
+float16_t left215; min16uint right215; left215 = right215; /* expected-warning {{min16uint is promoted to uint16_t}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left215'}} */
+float16_t left216; int16_t right216; left216 = right216;   /* fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left216'}} */
+float16_t left217; int32_t right217; left217 = right217;   /* expected-warning {{conversion from larger type 'int32_t' to smaller type 'float16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left217'}} */
+float16_t left218; int64_t right218; left218 = right218;   /* expected-warning {{conversion from larger type 'int64_t' to smaller type 'float16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left218'}} */
+float16_t left219; float16_t right219; left219 = right219; /* fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left219'}} */
+float16_t left220; float32_t right220; left220 = right220; /* expected-warning {{conversion from larger type 'float32_t' to smaller type 'float16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left220'}} */
+float16_t left221; float64_t right221; left221 = right221; /* expected-warning {{conversion from larger type 'float64_t' to smaller type 'float16_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'left221'}} */
+
+float32_t left222; bool right222; left222 = right222;      /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left222'}} */
+float32_t left223; int right223; left223 = right223;       /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left223'}} */
+float32_t left225; uint right225; left225 = right225;      /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left225'}} */
+float32_t left227; dword right227; left227 = right227;     /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left227'}} */
+float32_t left228; half right228; left228 = right228;      /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left228'}} */
+float32_t left229; float right229; left229 = right229;     /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left229'}} */
+float32_t left230; double right230; left230 = right230;    /* expected-warning {{conversion from larger type 'double' to smaller type 'float32_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left230'}} */
+float32_t left231; min16float right231; left231 = right231;    /* expected-warning {{min16float is promoted to float16_t}} fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left231'}} */
+float32_t left232; min10float right232; left232 = right232;    /* expected-warning {{min10float is promoted to float16_t}} fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left232'}} */
+float32_t left233; min16int right233; left233 = right233;  /* expected-warning {{min16int is promoted to int16_t}} fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left233'}} */
+float32_t left234; min12int right234; left234 = right234;  /* expected-warning {{min12int is promoted to int16_t}} fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left234'}} */
+float32_t left235; min16uint right235; left235 = right235; /* expected-warning {{min16uint is promoted to uint16_t}} fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left235'}} */
+float32_t left236; int16_t right236; left236 = right236;   /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left236'}} */
+float32_t left237; int32_t right237; left237 = right237;   /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left237'}} */
+float32_t left238; int64_t right238; left238 = right238;   /* expected-warning {{conversion from larger type 'int64_t' to smaller type 'float32_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left238'}} */
+float32_t left239; float16_t right239; left239 = right239; /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left239'}} */
+float32_t left240; float32_t right240; left240 = right240; /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left240'}} */
+float32_t left241; float64_t right241; left241 = right241; /* expected-warning {{conversion from larger type 'float64_t' to smaller type 'float32_t', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'left241'}} */
+
+float64_t left242; bool right242; left242 = right242;      /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left242'}} */
+float64_t left243; int right243; left243 = right243;       /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left243'}} */
+float64_t left245; uint right245; left245 = right245;      /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left245'}} */
+float64_t left247; dword right247; left247 = right247;     /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left247'}} */
+float64_t left248; half right248; left248 = right248;      /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left248'}} */
+float64_t left249; float right249; left249 = right249;     /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left249'}} */
+float64_t left250; double right250; left250 = right250;    /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left250'}} */
+float64_t left251; min16float right251; left251 = right251;    /* expected-warning {{min16float is promoted to float16_t}} fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left251'}} */
+float64_t left252; min10float right252; left252 = right252;    /* expected-warning {{min10float is promoted to float16_t}} fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left252'}} */
+float64_t left253; min16int right253; left253 = right253;  /* expected-warning {{min16int is promoted to int16_t}} fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left253'}} */
+float64_t left254; min12int right254; left254 = right254;  /* expected-warning {{min12int is promoted to int16_t}} fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left254'}} */
+float64_t left255; min16uint right255; left255 = right255; /* expected-warning {{min16uint is promoted to uint16_t}} fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left255'}} */
+float64_t left256; int16_t right256; left256 = right256;   /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left256'}} */
+float64_t left257; int32_t right257; left257 = right257;   /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left257'}} */
+float64_t left258; int64_t right258; left258 = right258;   /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left258'}} */
+float64_t left259; float16_t right259; left259 = right259; /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left259'}} */
+float64_t left260; float32_t right260; left260 = right260; /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left260'}} */
+float64_t left261; float64_t right261; left261 = right261; /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'left261'}} */
+
+bool left262; int16_t right262; left262 = right262;        /* fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'right262'}} */
+bool left263; int32_t right263; left263 = right263;        /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'right263'}} */
+bool left264; int64_t right264; left264 = right264;        /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'right264'}} */
+bool left265; float16_t right265; left265 = right265;      /* fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'right265'}} */
+bool left266; float32_t right266; left266 = right266;      /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'right266'}} */
+bool left267; float64_t right267; left267 = right267;      /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'right267'}} */
+
+int left268; int16_t right268; left268 = right268;         /* fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'right268'}} */
+int left269; int32_t right269; left269 = right269;         /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'right269'}} */
+int left271; int64_t right271; left271 = right271;         /* expected-warning {{conversion from larger type 'int64_t' to smaller type 'int', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'right271'}} */
+int left272; float16_t right272; left272 = right272;       /* fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'right272'}} */
+int left273; float32_t right273; left273 = right273;       /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'right273'}} */
+int left274; float64_t right274; left274 = right274;       /* expected-warning {{conversion from larger type 'float64_t' to smaller type 'int', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'right274'}} */
+
+uint left275; uint16_t right275; left275 = right275;       /* fxc-error {{X3000: unrecognized identifier 'right275'}} fxc-error {{X3000: unrecognized identifier 'uint16_t'}} */
+uint left276; uint32_t right276; left276 = right276;       /* fxc-error {{X3000: unrecognized identifier 'right276'}} fxc-error {{X3000: unrecognized identifier 'uint32_t'}} */
+uint left278; uint64_t right278; left278 = right278;       /* expected-warning {{conversion from larger type 'uint64_t' to smaller type 'uint', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'right278'}} fxc-error {{X3000: unrecognized identifier 'uint64_t'}} */
+uint left279; float16_t right279; left279 = right279;      /* fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'right279'}} */
+uint left280; float32_t right280; left280 = right280;      /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'right280'}} */
+uint left281; float64_t right281; left281 = right281;      /* expected-warning {{conversion from larger type 'float64_t' to smaller type 'uint', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'right281'}} */
+
+dword left282; int16_t right282; left282 = right282;       /* fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'right282'}} */
+dword left283; int32_t right283; left283 = right283;       /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'right283'}} */
+dword left284; int64_t right284; left284 = right284;       /* expected-warning {{conversion from larger type 'int64_t' to smaller type 'dword', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'right284'}} */
+dword left285; float16_t right285; left285 = right285;     /* fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'right285'}} */
+dword left286; float32_t right286; left286 = right286;     /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'right286'}} */
+dword left287; float64_t right287; left287 = right287;     /* expected-warning {{conversion from larger type 'float64_t' to smaller type 'dword', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'right287'}} */
+
+float left288; int16_t right288; left288 = right288;       /* fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'right288'}} */
+float left289; int32_t right289; left289 = right289;       /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'right289'}} */
+float left290; int64_t right290; left290 = right290;       /* expected-warning {{conversion from larger type 'int64_t' to smaller type 'float', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'right290'}} */
+float left291; float16_t right291; left291 = right291;     /* fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'right291'}} */
+float left292; float32_t right292; left292 = right292;     /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'right292'}} */
+float left293; float64_t right293; left293 = right293;     /* expected-warning {{conversion from larger type 'float64_t' to smaller type 'float', possible loss of data}} fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'right293'}} */
+
+double left294; int16_t right294; left294 = right294;      /* fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'right294'}} */
+double left295; int32_t right295; left295 = right295;      /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'right295'}} */
+double left296; int64_t right296; left296 = right296;      /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'right296'}} */
+double left297; float16_t right297; left297 = right297;    /* fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'right297'}} */
+double left298; float32_t right298; left298 = right298;    /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'right298'}} */
+double left299; float64_t right299; left299 = right299;    /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'right299'}} */
 
 // Now with unorm and snorm modifiers.
 /*
@@ -196,106 +353,106 @@ min16uint left143; min16uint right143; left143 = right143; /* expected-warning {
  float left1001; unorm float right1001; left1001 = right1001;
 // float left1002; snorm double right1002; left1002 = right1002;
 // float left1003; unorm double right1003; left1003 = right1003;
- float left1004; snorm min16float right1004; left1004 = right1004;    /* expected-warning {{min16float is promoted to half}} */
- float left1005; unorm min16float right1005; left1005 = right1005;    /* expected-warning {{min16float is promoted to half}} */
- float left1006; snorm min10float right1006; left1006 = right1006;  // expected-warning {{min10float is promoted to half}}
- float left1007; unorm min10float right1007; left1007 = right1007;  // expected-warning {{min10float is promoted to half}}
+ float left1004; snorm min16float right1004; left1004 = right1004;    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+ float left1005; unorm min16float right1005; left1005 = right1005;    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+ float left1006; snorm min10float right1006; left1006 = right1006;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+ float left1007; unorm min10float right1007; left1007 = right1007;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
 snorm float left1008;  float right1008; left1008 = right1008;
 snorm float left1009; snorm float right1009; left1009 = right1009;
 snorm float left1010; unorm float right1010; left1010 = right1010;
 // snorm float left1011;  double right1011; left1011 = right1011;
 // snorm float left1012; snorm double right1012; left1012 = right1012;
 // snorm float left1013; unorm double right1013; left1013 = right1013;
-snorm float left1014;  min16float right1014; left1014 = right1014;  /* expected-warning {{min16float is promoted to half}} */
-snorm float left1015; snorm min16float right1015; left1015 = right1015;    /* expected-warning {{min16float is promoted to half}} */
-snorm float left1016; unorm min16float right1016; left1016 = right1016;    /* expected-warning {{min16float is promoted to half}} */
-snorm float left1017;  min10float right1017; left1017 = right1017;  // expected-warning {{min10float is promoted to half}}
-snorm float left1018; snorm min10float right1018; left1018 = right1018;  // expected-warning {{min10float is promoted to half}}
-snorm float left1019; unorm min10float right1019; left1019 = right1019;  // expected-warning {{min10float is promoted to half}}
+snorm float left1014;  min16float right1014; left1014 = right1014;  /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+snorm float left1015; snorm min16float right1015; left1015 = right1015;    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+snorm float left1016; unorm min16float right1016; left1016 = right1016;    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+snorm float left1017;  min10float right1017; left1017 = right1017;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+snorm float left1018; snorm min10float right1018; left1018 = right1018;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+snorm float left1019; unorm min10float right1019; left1019 = right1019;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
 unorm float left1020;  float right1020; left1020 = right1020;
 unorm float left1021; snorm float right1021; left1021 = right1021;
 unorm float left1022; unorm float right1022; left1022 = right1022;
 // unorm float left1023;  double right1023; left1023 = right1023;
 // unorm float left1024; snorm double right1024; left1024 = right1024;
 // unorm float left1025; unorm double right1025; left1025 = right1025;
-unorm float left1026;  min16float right1026; left1026 = right1026;       /* expected-warning {{min16float is promoted to half}} */
-unorm float left1027; snorm min16float right1027; left1027 = right1027;  /* expected-warning {{min16float is promoted to half}} */
-unorm float left1028; unorm min16float right1028; left1028 = right1028;  /* expected-warning {{min16float is promoted to half}} */
-unorm float left1029;  min10float right1029; left1029 = right1029;  // expected-warning {{min10float is promoted to half}}
-unorm float left1030; snorm min10float right1030; left1030 = right1030;  // expected-warning {{min10float is promoted to half}}
-unorm float left1031; unorm min10float right1031; left1031 = right1031;  // expected-warning {{min10float is promoted to half}}
+unorm float left1026;  min16float right1026; left1026 = right1026;       /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+unorm float left1027; snorm min16float right1027; left1027 = right1027;  /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+unorm float left1028; unorm min16float right1028; left1028 = right1028;  /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+unorm float left1029;  min10float right1029; left1029 = right1029;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+unorm float left1030; snorm min10float right1030; left1030 = right1030;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+unorm float left1031; unorm min10float right1031; left1031 = right1031;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
  double left1032; snorm float right1032; left1032 = right1032;
  double left1033; unorm float right1033; left1033 = right1033;
  double left1034; snorm double right1034; left1034 = right1034;
  double left1035; unorm double right1035; left1035 = right1035;
- double left1036; snorm min16float right1036; left1036 = right1036;      /* expected-warning {{min16float is promoted to half}} */
- double left1037; unorm min16float right1037; left1037 = right1037;      /* expected-warning {{min16float is promoted to half}} */
- double left1038; snorm min10float right1038; left1038 = right1038;  // expected-warning {{min10float is promoted to half}}
- double left1039; unorm min10float right1039; left1039 = right1039;  // expected-warning {{min10float is promoted to half}}
+ double left1036; snorm min16float right1036; left1036 = right1036;      /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+ double left1037; unorm min16float right1037; left1037 = right1037;      /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+ double left1038; snorm min10float right1038; left1038 = right1038;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+ double left1039; unorm min10float right1039; left1039 = right1039;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
 snorm double left1040;  float right1040; left1040 = right1040;
 snorm double left1041; snorm float right1041; left1041 = right1041;
 snorm double left1042; unorm float right1042; left1042 = right1042;
 snorm double left1043;  double right1043; left1043 = right1043;
 snorm double left1044; snorm double right1044; left1044 = right1044;
 snorm double left1045; unorm double right1045; left1045 = right1045;
-snorm double left1046;  min16float right1046; left1046 = right1046;  /* expected-warning {{min16float is promoted to half}} */
-snorm double left1047; snorm min16float right1047; left1047 = right1047;    /* expected-warning {{min16float is promoted to half}} */
-snorm double left1048; unorm min16float right1048; left1048 = right1048;    /* expected-warning {{min16float is promoted to half}} */
-snorm double left1049;  min10float right1049; left1049 = right1049;  // expected-warning {{min10float is promoted to half}}
-snorm double left1050; snorm min10float right1050; left1050 = right1050;  // expected-warning {{min10float is promoted to half}}
-snorm double left1051; unorm min10float right1051; left1051 = right1051;  // expected-warning {{min10float is promoted to half}}
+snorm double left1046;  min16float right1046; left1046 = right1046;  /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+snorm double left1047; snorm min16float right1047; left1047 = right1047;    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+snorm double left1048; unorm min16float right1048; left1048 = right1048;    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+snorm double left1049;  min10float right1049; left1049 = right1049;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+snorm double left1050; snorm min10float right1050; left1050 = right1050;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+snorm double left1051; unorm min10float right1051; left1051 = right1051;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
 unorm double left1052;  float right1052; left1052 = right1052;
 unorm double left1053; snorm float right1053; left1053 = right1053;
 unorm double left1054; unorm float right1054; left1054 = right1054;
 unorm double left1055;  double right1055; left1055 = right1055;
 unorm double left1056; snorm double right1056; left1056 = right1056;
 unorm double left1057; unorm double right1057; left1057 = right1057;
-unorm double left1058;  min16float right1058; left1058 = right1058;       /* expected-warning {{min16float is promoted to half}} */
-unorm double left1059; snorm min16float right1059; left1059 = right1059;  /* expected-warning {{min16float is promoted to half}} */
-unorm double left1060; unorm min16float right1060; left1060 = right1060;  /* expected-warning {{min16float is promoted to half}} */
-unorm double left1061;  min10float right1061; left1061 = right1061;  // expected-warning {{min10float is promoted to half}}
-unorm double left1062; snorm min10float right1062; left1062 = right1062;  // expected-warning {{min10float is promoted to half}}
-unorm double left1063; unorm min10float right1063; left1063 = right1063;  // expected-warning {{min10float is promoted to half}}
+unorm double left1058;  min16float right1058; left1058 = right1058;       /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+unorm double left1059; snorm min16float right1059; left1059 = right1059;  /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+unorm double left1060; unorm min16float right1060; left1060 = right1060;  /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+unorm double left1061;  min10float right1061; left1061 = right1061;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+unorm double left1062; snorm min10float right1062; left1062 = right1062;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+unorm double left1063; unorm min10float right1063; left1063 = right1063;  // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
 // min16float left1064; snorm float right1064; left1064 = right1064;
 // min16float left1065; unorm float right1065; left1065 = right1065;
 // min16float left1066; snorm double right1066; left1066 = right1066;
 // min16float left1067; unorm double right1067; left1067 = right1067;
- min16float left1068; snorm min16float right1068; left1068 = right1068;   /* expected-warning {{min16float is promoted to half}} expected-warning {{min16float is promoted to half}} */
- min16float left1069; unorm min16float right1069; left1069 = right1069;   /* expected-warning {{min16float is promoted to half}} expected-warning {{min16float is promoted to half}} */
- min16float left1070; snorm min10float right1070; left1070 = right1070;  // expected-warning {{min10float is promoted to half}} expected-warning {{min16float is promoted to half}}
- min16float left1071; unorm min10float right1071; left1071 = right1071;  // expected-warning {{min10float is promoted to half}} expected-warning {{min16float is promoted to half}}
+ min16float left1068; snorm min16float right1068; left1068 = right1068;   /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+ min16float left1069; unorm min16float right1069; left1069 = right1069;   /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+ min16float left1070; snorm min10float right1070; left1070 = right1070;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}}
+ min16float left1071; unorm min10float right1071; left1071 = right1071;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}}
 // snorm min16float left1072;  float right1072; left1072 = right1072;
 // snorm min16float left1073; snorm float right1073; left1073 = right1073;
 // snorm min16float left1074; unorm float right1074; left1074 = right1074;
 // snorm min16float left1075;  double right1075; left1075 = right1075;
 // snorm min16float left1076; snorm double right1076; left1076 = right1076;
 // snorm min16float left1077; unorm double right1077; left1077 = right1077;
-snorm min16float left1078;  min16float right1078; left1078 = right1078;  /* expected-warning {{min16float is promoted to half}} expected-warning {{min16float is promoted to half}} */
-snorm min16float left1079; snorm min16float right1079; left1079 = right1079;    /* expected-warning {{min16float is promoted to half}} expected-warning {{min16float is promoted to half}} */
-snorm min16float left1080; unorm min16float right1080; left1080 = right1080;    /* expected-warning {{min16float is promoted to half}} expected-warning {{min16float is promoted to half}} */
-snorm min16float left1081;  min10float right1081; left1081 = right1081;  // expected-warning {{min10float is promoted to half}} expected-warning {{min16float is promoted to half}}
-snorm min16float left1082; snorm min10float right1082; left1082 = right1082;  // expected-warning {{min10float is promoted to half}} expected-warning {{min16float is promoted to half}}
-snorm min16float left1083; unorm min10float right1083; left1083 = right1083;  // expected-warning {{min10float is promoted to half}} expected-warning {{min16float is promoted to half}}
+snorm min16float left1078;  min16float right1078; left1078 = right1078;  /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+snorm min16float left1079; snorm min16float right1079; left1079 = right1079;    /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+snorm min16float left1080; unorm min16float right1080; left1080 = right1080;    /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+snorm min16float left1081;  min10float right1081; left1081 = right1081;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}}
+snorm min16float left1082; snorm min10float right1082; left1082 = right1082;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}}
+snorm min16float left1083; unorm min10float right1083; left1083 = right1083;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}}
 // unorm min16float left1084;  float right1084; left1084 = right1084;
 // unorm min16float left1085; snorm float right1085; left1085 = right1085;
 // unorm min16float left1086; unorm float right1086; left1086 = right1086;
 // unorm min16float left1087;  double right1087; left1087 = right1087;
 // unorm min16float left1088; snorm double right1088; left1088 = right1088;
 // unorm min16float left1089; unorm double right1089; left1089 = right1089;
-unorm min16float left1090;  min16float right1090; left1090 = right1090;       /* expected-warning {{min16float is promoted to half}} expected-warning {{min16float is promoted to half}} */
-unorm min16float left1091; snorm min16float right1091; left1091 = right1091;  /* expected-warning {{min16float is promoted to half}} expected-warning {{min16float is promoted to half}} */
-unorm min16float left1092; unorm min16float right1092; left1092 = right1092;  /* expected-warning {{min16float is promoted to half}} expected-warning {{min16float is promoted to half}} */
-unorm min16float left1093;  min10float right1093; left1093 = right1093;  // expected-warning {{min10float is promoted to half}} expected-warning {{min16float is promoted to half}}
-unorm min16float left1094; snorm min10float right1094; left1094 = right1094;  // expected-warning {{min10float is promoted to half}} expected-warning {{min16float is promoted to half}}
-unorm min16float left1095; unorm min10float right1095; left1095 = right1095;  // expected-warning {{min10float is promoted to half}} expected-warning {{min16float is promoted to half}}
+unorm min16float left1090;  min16float right1090; left1090 = right1090;       /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+unorm min16float left1091; snorm min16float right1091; left1091 = right1091;  /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+unorm min16float left1092; unorm min16float right1092; left1092 = right1092;  /* expected-warning {{min16float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+unorm min16float left1093;  min10float right1093; left1093 = right1093;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}}
+unorm min16float left1094; snorm min10float right1094; left1094 = right1094;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}}
+unorm min16float left1095; unorm min10float right1095; left1095 = right1095;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}}
 // min10float left1096; snorm float right1096; left1096 = right1096;
 // min10float left1097; unorm float right1097; left1097 = right1097;
 // min10float left1098; snorm double right1098; left1098 = right1098;
 // min10float left1099; unorm double right1099; left1099 = right1099;
 // min10float left1100; snorm min16float right1100; left1100 = right1100;
 // min10float left1101; unorm min16float right1101; left1101 = right1101;
- min10float left1102; snorm min10float right1102; left1102 = right1102;  // expected-warning {{min10float is promoted to half}} expected-warning {{min10float is promoted to half}} //
- min10float left1103; unorm min10float right1103; left1103 = right1103;  // expected-warning {{min10float is promoted to half}} expected-warning {{min10float is promoted to half}} //
+ min10float left1102; snorm min10float right1102; left1102 = right1102;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} //
+ min10float left1103; unorm min10float right1103; left1103 = right1103;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} //
 // snorm min10float left1104;  float right1104; left1104 = right1104;
 // snorm min10float left1105; snorm float right1105; left1105 = right1105;
 // snorm min10float left1106; unorm float right1106; left1106 = right1106;
@@ -305,9 +462,9 @@ unorm min16float left1095; unorm min10float right1095; left1095 = right1095;  //
 // snorm min10float left1110;  min16float right1110; left1110 = right1110;
 // snorm min10float left1111; snorm min16float right1111; left1111 = right1111;
 // snorm min10float left1112; unorm min16float right1112; left1112 = right1112;
-snorm min10float left1113;  min10float right1113; left1113 = right1113;  // expected-warning {{min10float is promoted to half}} expected-warning {{min10float is promoted to half}} //
-snorm min10float left1114; snorm min10float right1114; left1114 = right1114;  // expected-warning {{min10float is promoted to half}} expected-warning {{min10float is promoted to half}} //
-snorm min10float left1115; unorm min10float right1115; left1115 = right1115;  // expected-warning {{min10float is promoted to half}} expected-warning {{min10float is promoted to half}} //
+snorm min10float left1113;  min10float right1113; left1113 = right1113;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} //
+snorm min10float left1114; snorm min10float right1114; left1114 = right1114;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} //
+snorm min10float left1115; unorm min10float right1115; left1115 = right1115;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} //
 // unorm min10float left1116;  float right1116; left1116 = right1116;
 // unorm min10float left1117; snorm float right1117; left1117 = right1117;
 // unorm min10float left1118; unorm float right1118; left1118 = right1118;
@@ -317,8 +474,8 @@ snorm min10float left1115; unorm min10float right1115; left1115 = right1115;  //
 // unorm min10float left1122;  min16float right1122; left1122 = right1122;
 // unorm min10float left1123; snorm min16float right1123; left1123 = right1123;
 // unorm min10float left1124; unorm min16float right1124; left1124 = right1124;
-unorm min10float left1125;  min10float right1125; left1125 = right1125;  // expected-warning {{min10float is promoted to half}} expected-warning {{min10float is promoted to half}} //
-unorm min10float left1126; snorm min10float right1126; left1126 = right1126;  // expected-warning {{min10float is promoted to half}} expected-warning {{min10float is promoted to half}} //
-unorm min10float left1127; unorm min10float right1127; left1127 = right1127;  // expected-warning {{min10float is promoted to half}} expected-warning {{min10float is promoted to half}} //
+unorm min10float left1125;  min10float right1125; left1125 = right1125;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} //
+unorm min10float left1126; snorm min10float right1126; left1126 = right1126;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} //
+unorm min10float left1127; unorm min10float right1127; left1127 = right1127;  // expected-warning {{min10float is promoted to float16_t}} expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} //
 
 }

+ 4109 - 0
tools/clang/test/HLSL/scalar-operators-assign-exact-precision.hlsl

@@ -0,0 +1,4109 @@
+// RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -Wno-conversion -ffreestanding -verify -enable-16bit-types -HV 2018 %s
+
+//
+// we use -Wno-unused-value because we generate some no-op expressions to yield errors
+// without also putting them in a static assertion
+//
+// we use -Wno-conversion because many of the assignments result in precision loss
+//
+
+// non-standard: consider right-hand-side const as equivalent
+//template<typename T>             struct is_same<T, const T> : public true_type{};
+// non-standard: consider right-hand-side lvalue as equivalent
+//template<typename T>             struct is_same<T, T&>      : public true_type{};
+
+// __decltype is the GCC way of saying 'decltype', but doesn't require C++11
+// _Static_assert is the C11 way of saying 'static_assert', but doesn't require C++11
+#ifdef VERIFY_FXC
+#define _Static_assert(a,b,c) ;
+#endif
+
+// To test with the classic compiler, run
+// %sdxroot%\tools\x86\fxc.exe /T vs_5_1 scalar-operators-assign.hlsl
+// with vs_2_0 (the default) min16float usage produces a complaint that it's not supported
+
+float4 plain(float4 param4 /* : FOO */) /*: FOO */{
+    bool        bools       = 0;
+    int         ints        = 0;
+    uint        uints       = 0;
+    dword       dwords      = 0;
+    half        halfs       = 0;
+    float       floats      = 0;
+    double      doubles     = 0;
+    min16float  min16floats = 0;
+    min10float  min10floats = 0;    min16int    min16ints   = 0;
+    min12int    min12ints   = 0;    min16uint   min16uints  = 0;
+    int16_t     int16_ts    = 0; /* fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'int16_ts'}} */
+    int32_t     int32_ts    = 0; /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'int32_ts'}} */
+    int64_t     int64_ts    = 0; /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'int64_ts'}} */
+    uint16_t    uint16_ts   = 0; /* fxc-error {{X3000: unrecognized identifier 'uint16_t'}} fxc-error {{X3000: unrecognized identifier 'uint16_ts'}} */
+    uint32_t    uint32_ts   = 0; /* fxc-error {{X3000: unrecognized identifier 'uint32_t'}} fxc-error {{X3000: unrecognized identifier 'uint32_ts'}} */
+    uint64_t    uint64_ts   = 0; /* fxc-error {{X3000: unrecognized identifier 'uint64_t'}} fxc-error {{X3000: unrecognized identifier 'uint64_ts'}} */
+    float16_t   float16_ts  = 0; /* fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'float16_ts'}} */
+    float32_t   float32_ts  = 0; /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'float32_ts'}} */
+    float64_t   float64_ts  = 0; /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'float64_ts'}} */
+
+// TODO: Known errors
+// boolean assignment is allowed for &=, |=, and ^= when it should be illegal
+
+/* <py>
+primitiveTypes = [
+  ("bool", 32, False, False),
+  ("int", 32, False, False),
+  ("uint", 32, False, True),
+  ("half", 16, True, False),
+  ("float", 32, True, False),
+  ("double", 64, True, False),
+  ("min16float", 16, True, False),
+  ("min10float",10, True, False),
+  ("min16int", 16, False, False),
+  ("min12int", 12, False, False),
+  ("min16uint", 16, False, True),
+  ("int16_t", 16, False, False),
+  ("int32_t", 32, False, False),
+  ("int64_t", 64, False, False),
+  ("uint16_t", 16, False, True),
+  ("uint32_t", 32, False, True),
+  ("uint64_t", 64, False, True),
+  ("float16_t", 16, True, False),
+  ("float32_t", 32, True, False),
+  ("float64_t", 64, True, False),
+]
+
+AssignOperators = [ "=", "+=", "-=", "/=", "%=" ]
+
+BitAssignOperators = [ "<<=", ">>=", "&=", "|=", "^="]
+
+def GenerateAssignStatement(operator, operand1, operand2):
+    type1, size1, is_float1, unsigned1 = operand1
+    type2, size2, is_float2, unsigned2 = operand2
+    if operator in BitAssignOperators:
+        if is_float1 or is_float2 or type1 == "bool":
+            return "({0}s {1} {2}s);".format(type1, operator, type2)
+        return "_Static_assert(std::is_same<{0}, __decltype({1}s {2} {3}s)>::value, \"\");".format(type1, type1, operator, type2)
+    # some exceptions for arithmetic assigmnets
+    # double modulo
+    if operator == "%=" and (type1 == "double" or type2 == "double" or type1 == "float64_t" or type2 == "float64_t"):
+        return "({0}s {1} {2}s);".format(type1, operator, type2)
+    # bool lvalue
+    if type1 == "bool":
+        return "({0}s {1} {2}s);".format(type1, operator, type2)
+    # min precision division for signed integer
+    if (type2 == "min12int" or type2 == "min16int") and operator == "/":
+        return "({0}s {1} {2}s);".format(type1, operator, type2)
+    return "_Static_assert(std::is_same<{0}, __decltype({1}s {2} {3}s)>::value, \"\");".format(type1, type1, operator, type2)
+
+def GenerateAssignOperators():
+    result = []
+    for operator in AssignOperators + BitAssignOperators:
+        for operand1 in primitiveTypes:
+            for operand2 in primitiveTypes:
+                result += [GenerateAssignStatement(operator, operand1, operand2)]
+    return result
+</py>*/
+// <py::lines('GENERATED_ASSIGN')>GenerateAssignOperators()</py>
+// GENERATED_ASSIGN:BEGIN
+(bools = bools);
+(bools = ints);
+(bools = uints);
+(bools = halfs);
+(bools = floats);
+(bools = doubles);
+(bools = min16floats);
+(bools = min10floats);
+(bools = min16ints);
+(bools = min12ints);
+(bools = min16uints);
+(bools = int16_ts);              /* fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(bools = int32_ts);              /* fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(bools = int64_ts);              /* fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(bools = uint16_ts);             /* fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(bools = uint32_ts);             /* fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(bools = uint64_ts);             /* fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(bools = float16_ts);            /* fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(bools = float32_ts);            /* fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(bools = float64_ts);            /* fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints = bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = halfs)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = doubles)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = min16floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = min10floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = uint64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = float16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = float32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints = float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = halfs)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = doubles)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = min16floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = min10floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = int16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = int32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = float16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = float32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints = float64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = bools)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = halfs)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = doubles)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = min16floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = min10floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = min16ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = min12ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = min16uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = int16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = int32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = int64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = uint16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = uint32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = uint64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = float16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = float32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs = float64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = bools)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = doubles)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = min16floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = min10floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = min16ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = min12ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = min16uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = int16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = int32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = int64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = uint16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = uint32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = uint64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = float16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = float32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats = float64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = bools)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = halfs)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = doubles)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = min16floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = min10floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = min16ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = min12ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = min16uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = int16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = int32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = int64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = uint16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = uint32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = uint64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = float16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = float32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles = float64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = bools)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = uints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = halfs)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = min16floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = min10floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = min16ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = min12ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = min16uints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = int16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = int32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = int64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = float16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = float32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats = float64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = bools)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = uints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = halfs)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = doubles)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = min16floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = min10floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = min16ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = min12ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = min16uints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = int16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = int32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = int64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = uint16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = uint32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = uint64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = float16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = float32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats = float64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = bools)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = halfs)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = doubles)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = min16floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = min10floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = min16ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = min12ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = min16uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = int16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = int32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = int64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = float16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = float32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints = float64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = bools)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = halfs)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = doubles)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = min16floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = min10floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = min16ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = min12ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = min16uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = int16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = int32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = int64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = uint16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = uint32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = uint64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = float16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = float32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints = float64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = bools)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = halfs)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = doubles)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = min16floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = min10floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = min16ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = min16uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = int16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = int32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = int64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = float16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = float32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints = float64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = bools)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = halfs)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = doubles)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = min16floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = min10floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = min16ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = min12ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = min16uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = int16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = int32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = int64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = uint16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = uint32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = uint64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = float16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = float32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts = float64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = bools)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = halfs)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = doubles)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = min16floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = min10floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = min12ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = int32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = int64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = uint16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = uint32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = uint64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = float16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = float32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts = float64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = halfs)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = doubles)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = min16floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = min10floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = min12ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = int64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = uint16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = uint32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = uint64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = float16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = float32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts = float64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = bools)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = halfs)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = doubles)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = min16floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = min10floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = min16ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = min12ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = min16uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = int16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = int32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = float16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = float32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts = float64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = bools)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = halfs)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = doubles)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = min16floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = min10floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = int32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = float16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = float32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts = float64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = halfs)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = doubles)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = min16floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = min10floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = float16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = float32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts = float64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = bools)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = halfs)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = doubles)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = min16floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = min10floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = min16ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = min12ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = min16uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = int16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = int32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = int64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = uint16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = uint32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = float16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = float32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts = float64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = bools)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = halfs)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = doubles)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = min16floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = min10floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = min16ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = min12ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = min16uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = int16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = int32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = int64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = uint16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = uint32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = uint64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = float32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts = float64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = bools)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = halfs)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = doubles)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = min16floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = min10floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = min16ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = min12ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = min16uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = int16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = int32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = int64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = uint16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = uint32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = uint64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = float16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts = float64_ts)>::value, "");
+(bools += bools);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools += ints);                 /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools += uints);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools += halfs);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools += floats);               /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools += doubles);              /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools += min16floats);          /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools += min10floats);          /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools += min16ints);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools += min12ints);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools += min16uints);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools += int16_ts);             /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(bools += int32_ts);             /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(bools += int64_ts);             /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(bools += uint16_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(bools += uint32_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(bools += uint64_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(bools += float16_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(bools += float32_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(bools += float64_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints += bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += halfs)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += doubles)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += min16floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += min10floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += uint64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += float16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += float32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints += float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += halfs)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += doubles)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += min16floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += min10floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += int16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += int32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += float16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += float32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints += float64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += bools)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += halfs)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += doubles)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += min16floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += min10floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += min16ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += min12ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += min16uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += int16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += int32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += int64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += uint16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += uint32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += uint64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += float16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += float32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs += float64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += bools)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += doubles)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += min16floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += min10floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += min16ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += min12ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += min16uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += int16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += int32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += int64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += uint16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += uint32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += uint64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += float16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += float32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats += float64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += bools)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += halfs)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += doubles)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += min16floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += min10floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += min16ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += min12ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += min16uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += int16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += int32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += int64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += uint16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += uint32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += uint64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += float16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += float32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles += float64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += bools)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += uints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += halfs)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += min16floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += min10floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += min16ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += min12ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += min16uints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += int16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += int32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += int64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += float16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += float32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats += float64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += bools)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += uints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += halfs)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += doubles)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += min16floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += min10floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += min16ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += min12ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += min16uints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += int16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += int32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += int64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += uint16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += uint32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += uint64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += float16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += float32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats += float64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += bools)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += halfs)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += doubles)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += min16floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += min10floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += min16ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += min12ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += min16uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += int16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += int32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += int64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += float16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += float32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints += float64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += bools)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += halfs)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += doubles)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += min16floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += min10floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += min16ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += min12ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += min16uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += int16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += int32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += int64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += uint16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += uint32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += uint64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += float16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += float32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints += float64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += bools)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += halfs)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += doubles)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += min16floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += min10floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += min16ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += min16uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += int16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += int32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += int64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += float16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += float32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints += float64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += bools)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += halfs)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += doubles)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += min16floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += min10floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += min16ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += min12ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += min16uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += int16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += int32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += int64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += uint16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += uint32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += uint64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += float16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += float32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts += float64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += bools)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += halfs)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += doubles)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += min16floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += min10floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += min12ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += int32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += int64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += uint16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += uint32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += uint64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += float16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += float32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts += float64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += halfs)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += doubles)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += min16floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += min10floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += min12ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += int64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += uint16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += uint32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += uint64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += float16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += float32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts += float64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += bools)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += halfs)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += doubles)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += min16floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += min10floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += min16ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += min12ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += min16uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += int16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += int32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += float16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += float32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts += float64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += bools)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += halfs)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += doubles)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += min16floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += min10floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += int32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += float16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += float32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts += float64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += halfs)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += doubles)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += min16floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += min10floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += float16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += float32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts += float64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += bools)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += halfs)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += doubles)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += min16floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += min10floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += min16ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += min12ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += min16uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += int16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += int32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += int64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += uint16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += uint32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += float16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += float32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts += float64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += bools)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += halfs)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += doubles)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += min16floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += min10floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += min16ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += min12ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += min16uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += int16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += int32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += int64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += uint16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += uint32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += uint64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += float32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts += float64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += bools)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += halfs)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += doubles)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += min16floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += min10floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += min16ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += min12ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += min16uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += int16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += int32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += int64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += uint16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += uint32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += uint64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += float16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts += float64_ts)>::value, "");
+(bools -= bools);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools -= ints);                 /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools -= uints);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools -= halfs);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools -= floats);               /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools -= doubles);              /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools -= min16floats);          /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools -= min10floats);          /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools -= min16ints);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools -= min12ints);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools -= min16uints);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools -= int16_ts);             /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(bools -= int32_ts);             /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(bools -= int64_ts);             /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(bools -= uint16_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(bools -= uint32_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(bools -= uint64_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(bools -= float16_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(bools -= float32_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(bools -= float64_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints -= bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= halfs)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= doubles)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= min16floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= min10floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= float16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= float32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints -= float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= halfs)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= doubles)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= min16floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= min10floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= float16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= float32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints -= float64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= bools)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= halfs)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= doubles)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= min16floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= min10floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= min16ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= min12ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= min16uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= int16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= int32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= int64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= float16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= float32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs -= float64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= bools)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= doubles)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= min16floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= min10floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= min16ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= min12ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= min16uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= int16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= int32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= int64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= float16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= float32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats -= float64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= bools)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= halfs)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= doubles)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= min16floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= min10floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= min16ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= min12ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= min16uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= int16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= int32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= int64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= float16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= float32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles -= float64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= bools)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= uints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= halfs)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= min16floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= min10floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= min16ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= min12ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= min16uints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= float16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= float32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats -= float64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= bools)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= uints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= halfs)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= doubles)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= min16floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= min10floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= min16ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= min12ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= min16uints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= int16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= int32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= int64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= float16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= float32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats -= float64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= bools)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= halfs)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= doubles)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= min16floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= min10floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= min16ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= min12ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= min16uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= float16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= float32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints -= float64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= bools)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= halfs)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= doubles)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= min16floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= min10floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= min16ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= min12ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= min16uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= int16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= int32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= int64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= float16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= float32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints -= float64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= bools)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= halfs)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= doubles)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= min16floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= min10floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= min16ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= min16uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= float16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= float32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints -= float64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= bools)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= halfs)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= doubles)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= min16floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= min10floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= min16ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= min12ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= min16uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= int16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= int32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= int64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= float16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= float32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts -= float64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= bools)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= halfs)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= doubles)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= min16floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= min10floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= min12ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= int32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= int64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= float16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= float32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts -= float64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= halfs)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= doubles)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= min16floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= min10floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= min12ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= int64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= float16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= float32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts -= float64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= bools)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= halfs)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= doubles)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= min16floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= min10floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= min16ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= min12ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= min16uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= float16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= float32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts -= float64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= bools)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= halfs)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= doubles)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= min16floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= min10floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= float16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= float32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts -= float64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= halfs)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= doubles)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= min16floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= min10floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= float16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= float32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts -= float64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= bools)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= halfs)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= doubles)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= min16floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= min10floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= min16ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= min12ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= min16uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= int16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= int32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= int64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= float16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= float32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts -= float64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= bools)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= halfs)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= doubles)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= min16floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= min10floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= min16ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= min12ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= min16uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= int16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= int32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= int64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= float32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts -= float64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= bools)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= halfs)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= doubles)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= min16floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= min10floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= min16ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= min12ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= min16uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= int16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= int32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= int64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= uint16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= uint32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= uint64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= float16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts -= float64_ts)>::value, "");
+(bools /= bools);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools /= ints);                 /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools /= uints);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools /= halfs);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools /= floats);               /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools /= doubles);              /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools /= min16floats);          /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools /= min10floats);          /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools /= min16ints);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools /= min12ints);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools /= min16uints);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools /= int16_ts);             /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(bools /= int32_ts);             /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(bools /= int64_ts);             /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(bools /= uint16_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(bools /= uint32_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(bools /= uint64_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(bools /= float16_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(bools /= float32_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(bools /= float64_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints /= bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= halfs)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= doubles)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= min16floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= min10floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= float16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= float32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints /= float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= halfs)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= doubles)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= min16floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= min10floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= float16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= float32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints /= float64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= bools)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= halfs)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= doubles)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= min16floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= min10floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= min16ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= min12ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= min16uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= int16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= int32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= int64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= float16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= float32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs /= float64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= bools)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= doubles)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= min16floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= min10floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= min16ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= min12ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= min16uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= int16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= int32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= int64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= float16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= float32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats /= float64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= bools)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= halfs)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= doubles)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= min16floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= min10floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= min16ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= min12ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= min16uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= int16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= int32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= int64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= float16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= float32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles /= float64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= bools)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= uints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= halfs)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= min16floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= min10floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= min16ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= min12ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= min16uints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= float16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= float32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats /= float64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= bools)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= uints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= halfs)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= doubles)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= min16floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= min10floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= min16ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= min12ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= min16uints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= int16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= int32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= int64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= float16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= float32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats /= float64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= bools)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= halfs)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= doubles)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= min16floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= min10floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= min16ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= min12ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= min16uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= float16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= float32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints /= float64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= bools)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= halfs)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= doubles)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= min16floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= min10floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= min16ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= min12ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= min16uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= int16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= int32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= int64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= float16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= float32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints /= float64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= bools)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= halfs)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= doubles)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= min16floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= min10floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= min16ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= min16uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= float16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= float32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints /= float64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= bools)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= halfs)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= doubles)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= min16floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= min10floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= min16ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= min12ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= min16uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= int16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= int32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= int64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= float16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= float32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts /= float64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= bools)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= halfs)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= doubles)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= min16floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= min10floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= min12ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= int32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= int64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= float16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= float32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts /= float64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= halfs)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= doubles)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= min16floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= min10floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= min12ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= int64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= float16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= float32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts /= float64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= bools)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= halfs)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= doubles)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= min16floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= min10floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= min16ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= min12ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= min16uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= float16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= float32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts /= float64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= bools)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= halfs)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= doubles)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= min16floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= min10floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= float16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= float32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts /= float64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= halfs)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= doubles)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= min16floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= min10floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= float16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= float32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts /= float64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= bools)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= halfs)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= doubles)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= min16floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= min10floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= min16ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= min12ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= min16uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= int16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= int32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= int64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= float16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= float32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts /= float64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= bools)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= halfs)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= doubles)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= min16floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= min10floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= min16ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= min12ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= min16uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= int16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= int32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= int64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= float32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts /= float64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= bools)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= halfs)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= doubles)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= min16floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= min10floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= min16ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= min12ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= min16uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= int16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= int32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= int64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= uint16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= uint32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= uint64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= float16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts /= float64_ts)>::value, "");
+(bools %= bools);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools %= ints);                 /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools %= uints);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools %= halfs);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools %= floats);               /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools %= doubles);              /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools %= min16floats);          /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools %= min10floats);          /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools %= min16ints);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools %= min12ints);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools %= min16uints);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools %= int16_ts);             /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(bools %= int32_ts);             /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(bools %= int64_ts);             /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(bools %= uint16_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(bools %= uint32_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(bools %= uint64_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(bools %= float16_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(bools %= float32_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(bools %= float64_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints %= bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= halfs)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= floats)>::value, "");
+(ints %= doubles);               /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} */
+_Static_assert(std::is_same<int, __decltype(ints %= min16floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= min10floats)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= float16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints %= float32_ts)>::value, "");
+(ints %= float64_ts);            /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uints %= bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= halfs)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= floats)>::value, "");
+(uints %= doubles);              /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} */
+_Static_assert(std::is_same<uint, __decltype(uints %= min16floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= min10floats)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= float16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints %= float32_ts)>::value, "");
+(uints %= float64_ts);           /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<half, __decltype(halfs %= bools)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= halfs)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= floats)>::value, "");
+(halfs %= doubles);              /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} */
+_Static_assert(std::is_same<half, __decltype(halfs %= min16floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= min10floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= min16ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= min12ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= min16uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= int16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= int32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= int64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= float16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs %= float32_ts)>::value, "");
+(halfs %= float64_ts);           /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<float, __decltype(floats %= bools)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= floats)>::value, "");
+(floats %= doubles);             /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} */
+_Static_assert(std::is_same<float, __decltype(floats %= min16floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= min10floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= min16ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= min12ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= min16uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= int16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= int32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= int64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= float16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats %= float32_ts)>::value, "");
+(floats %= float64_ts);          /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(doubles %= bools);              /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+(doubles %= ints);               /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+(doubles %= uints);              /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+(doubles %= halfs);              /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+(doubles %= floats);             /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+(doubles %= doubles);            /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+(doubles %= min16floats);        /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+(doubles %= min10floats);        /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+(doubles %= min16ints);          /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+(doubles %= min12ints);          /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+(doubles %= min16uints);         /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+(doubles %= int16_ts);           /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(doubles %= int32_ts);           /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(doubles %= int64_ts);           /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(doubles %= uint16_ts);          /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(doubles %= uint32_ts);          /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(doubles %= uint64_ts);          /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(doubles %= float16_ts);         /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(doubles %= float32_ts);         /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(doubles %= float64_ts);         /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= bools)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= uints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= halfs)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= floats)>::value, "");
+(min16floats %= doubles);        /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= min16floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= min10floats)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= min16ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= min12ints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= min16uints)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= float16_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats %= float32_ts)>::value, "");
+(min16floats %= float64_ts);     /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= bools)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= uints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= halfs)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= floats)>::value, "");
+(min10floats %= doubles);        /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= min16floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= min10floats)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= min16ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= min12ints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= min16uints)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= int16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= int32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= int64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= float16_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats %= float32_ts)>::value, "");
+(min10floats %= float64_ts);     /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= bools)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= halfs)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= floats)>::value, "");
+(min16ints %= doubles);          /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= min16floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= min10floats)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= min16ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= min12ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= min16uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= float16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints %= float32_ts)>::value, "");
+(min16ints %= float64_ts);       /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= bools)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= halfs)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= floats)>::value, "");
+(min12ints %= doubles);          /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= min16floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= min10floats)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= min16ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= min12ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= min16uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= int16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= int32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= int64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= float16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints %= float32_ts)>::value, "");
+(min12ints %= float64_ts);       /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= bools)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= halfs)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= floats)>::value, "");
+(min16uints %= doubles);         /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= min16floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= min10floats)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= min16ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= min16uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= float16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints %= float32_ts)>::value, "");
+(min16uints %= float64_ts);      /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= bools)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= halfs)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= floats)>::value, "");
+(int16_ts %= doubles);           /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= min16floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= min10floats)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= min16ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= min12ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= min16uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= int16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= int32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= int64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= float16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts %= float32_ts)>::value, "");
+(int16_ts %= float64_ts);        /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= bools)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= halfs)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= floats)>::value, "");
+(int32_ts %= doubles);           /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= min16floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= min10floats)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= min12ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= int32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= int64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= float16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts %= float32_ts)>::value, "");
+(int32_ts %= float64_ts);        /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= halfs)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= floats)>::value, "");
+(int64_ts %= doubles);           /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= min16floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= min10floats)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= min12ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= int64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= float16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts %= float32_ts)>::value, "");
+(int64_ts %= float64_ts);        /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= bools)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= halfs)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= floats)>::value, "");
+(uint16_ts %= doubles);          /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= min16floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= min10floats)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= min16ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= min12ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= min16uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= float16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts %= float32_ts)>::value, "");
+(uint16_ts %= float64_ts);       /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= bools)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= halfs)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= floats)>::value, "");
+(uint32_ts %= doubles);          /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= min16floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= min10floats)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= float16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts %= float32_ts)>::value, "");
+(uint32_ts %= float64_ts);       /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= halfs)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= floats)>::value, "");
+(uint64_ts %= doubles);          /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= min16floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= min10floats)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= float16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts %= float32_ts)>::value, "");
+(uint64_ts %= float64_ts);       /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= bools)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= halfs)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= floats)>::value, "");
+(float16_ts %= doubles);         /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= min16floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= min10floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= min16ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= min12ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= min16uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= int16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= int32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= int64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= float16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts %= float32_ts)>::value, "");
+(float16_ts %= float64_ts);      /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= bools)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= halfs)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= floats)>::value, "");
+(float32_ts %= doubles);         /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= min16floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= min10floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= min16ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= min12ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= min16uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= int16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= int32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= int64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= uint16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= uint32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= uint64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts %= float32_ts)>::value, "");
+(float32_ts %= float64_ts);      /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float64_ts %= bools);           /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= ints);            /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= uints);           /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= halfs);           /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= floats);          /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= doubles);         /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= min16floats);     /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= min10floats);     /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= min16ints);       /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= min12ints);       /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= min16uints);      /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= int16_ts);        /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= int32_ts);        /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= int64_ts);        /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= uint16_ts);       /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= uint32_ts);       /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= uint64_ts);       /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= float16_ts);      /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= float32_ts);      /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts %= float64_ts);      /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(bools <<= bools);               /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools <<= ints);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools <<= uints);               /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools <<= halfs);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools <<= floats);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools <<= doubles);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools <<= min16floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools <<= min10floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools <<= min16ints);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools <<= min12ints);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools <<= min16uints);          /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools <<= int16_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(bools <<= int32_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(bools <<= int64_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(bools <<= uint16_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(bools <<= uint32_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(bools <<= uint64_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(bools <<= float16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(bools <<= float32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(bools <<= float64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints <<= bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints <<= ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints <<= uints)>::value, "");
+(ints <<= halfs);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints <<= floats);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints <<= doubles);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints <<= min16floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints <<= min10floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(ints <<= min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints <<= min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints <<= min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints <<= int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints <<= int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints <<= int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints <<= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints <<= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints <<= uint64_ts)>::value, "");
+(ints <<= float16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(ints <<= float32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(ints <<= float64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uints <<= bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints <<= ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints <<= uints)>::value, "");
+(uints <<= halfs);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints <<= floats);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints <<= doubles);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints <<= min16floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints <<= min10floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<uint, __decltype(uints <<= min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints <<= min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints <<= min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints <<= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints <<= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints <<= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints <<= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints <<= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints <<= uint64_ts)>::value, "");
+(uints <<= float16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(uints <<= float32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(uints <<= float64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(halfs <<= bools);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs <<= ints);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs <<= uints);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs <<= halfs);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs <<= floats);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs <<= doubles);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs <<= min16floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs <<= min10floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs <<= min16ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs <<= min12ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs <<= min16uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs <<= int16_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(halfs <<= int32_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(halfs <<= int64_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(halfs <<= uint16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(halfs <<= uint32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(halfs <<= uint64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(halfs <<= float16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(halfs <<= float32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(halfs <<= float64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(floats <<= bools);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats <<= ints);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats <<= uints);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats <<= halfs);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats <<= floats);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats <<= doubles);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats <<= min16floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats <<= min10floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats <<= min16ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats <<= min12ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats <<= min16uints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats <<= int16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(floats <<= int32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(floats <<= int64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(floats <<= uint16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(floats <<= uint32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(floats <<= uint64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(floats <<= float16_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(floats <<= float32_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(floats <<= float64_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(doubles <<= bools);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles <<= ints);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles <<= uints);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles <<= halfs);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles <<= floats);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles <<= doubles);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles <<= min16floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles <<= min10floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles <<= min16ints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles <<= min12ints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles <<= min16uints);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles <<= int16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(doubles <<= int32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(doubles <<= int64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(doubles <<= uint16_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(doubles <<= uint32_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(doubles <<= uint64_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(doubles <<= float16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(doubles <<= float32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(doubles <<= float64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(min16floats <<= bools);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats <<= ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats <<= uints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats <<= halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats <<= floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats <<= doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats <<= min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats <<= min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats <<= min16ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats <<= min12ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats <<= min16uints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats <<= int16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(min16floats <<= int32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(min16floats <<= int64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(min16floats <<= uint16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(min16floats <<= uint32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(min16floats <<= uint64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(min16floats <<= float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16floats <<= float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16floats <<= float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(min10floats <<= bools);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats <<= ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats <<= uints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats <<= halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats <<= floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats <<= doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats <<= min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats <<= min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats <<= min16ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats <<= min12ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats <<= min16uints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats <<= int16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(min10floats <<= int32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(min10floats <<= int64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(min10floats <<= uint16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(min10floats <<= uint32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(min10floats <<= uint64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(min10floats <<= float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min10floats <<= float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min10floats <<= float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints <<= bools)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints <<= ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints <<= uints)>::value, "");
+(min16ints <<= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints <<= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints <<= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints <<= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints <<= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints <<= min16ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints <<= min12ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints <<= min16uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints <<= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints <<= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints <<= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints <<= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints <<= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints <<= uint64_ts)>::value, "");
+(min16ints <<= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16ints <<= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16ints <<= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints <<= bools)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints <<= ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints <<= uints)>::value, "");
+(min12ints <<= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints <<= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints <<= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints <<= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints <<= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints <<= min16ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints <<= min12ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints <<= min16uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints <<= int16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints <<= int32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints <<= int64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints <<= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints <<= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints <<= uint64_ts)>::value, "");
+(min12ints <<= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min12ints <<= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min12ints <<= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints <<= bools)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints <<= ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints <<= uints)>::value, "");
+(min16uints <<= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints <<= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints <<= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints <<= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints <<= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints <<= min16ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints <<= min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints <<= min16uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints <<= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints <<= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints <<= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints <<= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints <<= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints <<= uint64_ts)>::value, "");
+(min16uints <<= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16uints <<= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16uints <<= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts <<= bools)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts <<= ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts <<= uints)>::value, "");
+(int16_ts <<= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts <<= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts <<= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts <<= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts <<= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts <<= min16ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts <<= min12ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts <<= min16uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts <<= int16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts <<= int32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts <<= int64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts <<= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts <<= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts <<= uint64_ts)>::value, "");
+(int16_ts <<= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts <<= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts <<= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts <<= bools)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts <<= ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts <<= uints)>::value, "");
+(int32_ts <<= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts <<= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts <<= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts <<= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts <<= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts <<= min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts <<= min12ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts <<= min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts <<= int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts <<= int32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts <<= int64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts <<= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts <<= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts <<= uint64_ts)>::value, "");
+(int32_ts <<= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts <<= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts <<= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts <<= bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts <<= ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts <<= uints)>::value, "");
+(int64_ts <<= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts <<= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts <<= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts <<= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts <<= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts <<= min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts <<= min12ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts <<= min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts <<= int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts <<= int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts <<= int64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts <<= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts <<= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts <<= uint64_ts)>::value, "");
+(int64_ts <<= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts <<= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts <<= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts <<= bools)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts <<= ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts <<= uints)>::value, "");
+(uint16_ts <<= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts <<= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts <<= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts <<= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts <<= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts <<= min16ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts <<= min12ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts <<= min16uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts <<= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts <<= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts <<= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts <<= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts <<= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts <<= uint64_ts)>::value, "");
+(uint16_ts <<= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts <<= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts <<= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts <<= bools)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts <<= ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts <<= uints)>::value, "");
+(uint32_ts <<= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts <<= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts <<= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts <<= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts <<= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts <<= min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts <<= min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts <<= min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts <<= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts <<= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts <<= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts <<= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts <<= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts <<= uint64_ts)>::value, "");
+(uint32_ts <<= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts <<= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts <<= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts <<= bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts <<= ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts <<= uints)>::value, "");
+(uint64_ts <<= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts <<= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts <<= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts <<= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts <<= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts <<= min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts <<= min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts <<= min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts <<= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts <<= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts <<= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts <<= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts <<= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts <<= uint64_ts)>::value, "");
+(uint64_ts <<= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts <<= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts <<= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(float16_ts <<= bools);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= min16ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= min12ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= min16uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= int16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= int32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= int64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= uint16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= uint32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= uint64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts <<= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float32_ts <<= bools);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= min16ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= min12ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= min16uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= int16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= int32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= int64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= uint16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= uint32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= uint64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts <<= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float64_ts <<= bools);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= min16ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= min12ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= min16uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= int16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= int32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= int64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= uint16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= uint32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= uint64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts <<= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(bools >>= bools);               /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools >>= ints);                /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools >>= uints);               /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools >>= halfs);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools >>= floats);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools >>= doubles);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools >>= min16floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools >>= min10floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools >>= min16ints);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools >>= min12ints);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools >>= min16uints);          /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools >>= int16_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(bools >>= int32_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(bools >>= int64_ts);            /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(bools >>= uint16_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(bools >>= uint32_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(bools >>= uint64_ts);           /* expected-error {{operator cannot be used with a bool lvalue}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(bools >>= float16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(bools >>= float32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(bools >>= float64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints >>= bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >>= ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >>= uints)>::value, "");
+(ints >>= halfs);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints >>= floats);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints >>= doubles);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints >>= min16floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints >>= min10floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(ints >>= min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >>= min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >>= min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >>= int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >>= int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >>= int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >>= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >>= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >>= uint64_ts)>::value, "");
+(ints >>= float16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(ints >>= float32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(ints >>= float64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uints >>= bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >>= ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >>= uints)>::value, "");
+(uints >>= halfs);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints >>= floats);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints >>= doubles);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints >>= min16floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints >>= min10floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<uint, __decltype(uints >>= min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >>= min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >>= min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >>= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >>= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >>= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >>= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >>= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >>= uint64_ts)>::value, "");
+(uints >>= float16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(uints >>= float32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(uints >>= float64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(halfs >>= bools);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs >>= ints);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs >>= uints);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs >>= halfs);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs >>= floats);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs >>= doubles);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs >>= min16floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs >>= min10floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs >>= min16ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs >>= min12ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs >>= min16uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs >>= int16_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(halfs >>= int32_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(halfs >>= int64_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(halfs >>= uint16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(halfs >>= uint32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(halfs >>= uint64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(halfs >>= float16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(halfs >>= float32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(halfs >>= float64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(floats >>= bools);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats >>= ints);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats >>= uints);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats >>= halfs);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats >>= floats);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats >>= doubles);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats >>= min16floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats >>= min10floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats >>= min16ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats >>= min12ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats >>= min16uints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats >>= int16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(floats >>= int32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(floats >>= int64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(floats >>= uint16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(floats >>= uint32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(floats >>= uint64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(floats >>= float16_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(floats >>= float32_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(floats >>= float64_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(doubles >>= bools);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles >>= ints);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles >>= uints);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles >>= halfs);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles >>= floats);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles >>= doubles);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles >>= min16floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles >>= min10floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles >>= min16ints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles >>= min12ints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles >>= min16uints);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles >>= int16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(doubles >>= int32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(doubles >>= int64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(doubles >>= uint16_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(doubles >>= uint32_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(doubles >>= uint64_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(doubles >>= float16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(doubles >>= float32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(doubles >>= float64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(min16floats >>= bools);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats >>= ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats >>= uints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats >>= halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats >>= floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats >>= doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats >>= min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats >>= min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats >>= min16ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats >>= min12ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats >>= min16uints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats >>= int16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(min16floats >>= int32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(min16floats >>= int64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(min16floats >>= uint16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(min16floats >>= uint32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(min16floats >>= uint64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(min16floats >>= float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16floats >>= float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16floats >>= float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(min10floats >>= bools);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats >>= ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats >>= uints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats >>= halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats >>= floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats >>= doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats >>= min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats >>= min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats >>= min16ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats >>= min12ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats >>= min16uints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats >>= int16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(min10floats >>= int32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(min10floats >>= int64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(min10floats >>= uint16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(min10floats >>= uint32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(min10floats >>= uint64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(min10floats >>= float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min10floats >>= float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min10floats >>= float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >>= bools)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints >>= ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints >>= uints)>::value, "");
+(min16ints >>= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints >>= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints >>= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints >>= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints >>= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >>= min16ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints >>= min12ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints >>= min16uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints >>= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints >>= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints >>= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints >>= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints >>= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints >>= uint64_ts)>::value, "");
+(min16ints >>= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16ints >>= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16ints >>= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >>= bools)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints >>= ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints >>= uints)>::value, "");
+(min12ints >>= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints >>= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints >>= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints >>= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints >>= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >>= min16ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints >>= min12ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints >>= min16uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints >>= int16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints >>= int32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints >>= int64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints >>= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints >>= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints >>= uint64_ts)>::value, "");
+(min12ints >>= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min12ints >>= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min12ints >>= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >>= bools)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >>= ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >>= uints)>::value, "");
+(min16uints >>= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints >>= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints >>= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints >>= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints >>= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >>= min16ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >>= min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >>= min16uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >>= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >>= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >>= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >>= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >>= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >>= uint64_ts)>::value, "");
+(min16uints >>= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16uints >>= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16uints >>= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >>= bools)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >>= ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >>= uints)>::value, "");
+(int16_ts >>= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts >>= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts >>= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts >>= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts >>= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >>= min16ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >>= min12ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >>= min16uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >>= int16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >>= int32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >>= int64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >>= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >>= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >>= uint64_ts)>::value, "");
+(int16_ts >>= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts >>= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts >>= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >>= bools)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >>= ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >>= uints)>::value, "");
+(int32_ts >>= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts >>= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts >>= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts >>= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts >>= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >>= min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >>= min12ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >>= min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >>= int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >>= int32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >>= int64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >>= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >>= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >>= uint64_ts)>::value, "");
+(int32_ts >>= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts >>= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts >>= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >>= bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >>= ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >>= uints)>::value, "");
+(int64_ts >>= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts >>= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts >>= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts >>= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts >>= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >>= min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >>= min12ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >>= min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >>= int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >>= int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >>= int64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >>= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >>= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >>= uint64_ts)>::value, "");
+(int64_ts >>= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts >>= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts >>= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >>= bools)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >>= ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >>= uints)>::value, "");
+(uint16_ts >>= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts >>= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts >>= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts >>= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts >>= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >>= min16ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >>= min12ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >>= min16uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >>= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >>= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >>= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >>= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >>= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >>= uint64_ts)>::value, "");
+(uint16_ts >>= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts >>= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts >>= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >>= bools)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >>= ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >>= uints)>::value, "");
+(uint32_ts >>= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts >>= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts >>= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts >>= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts >>= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >>= min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >>= min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >>= min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >>= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >>= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >>= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >>= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >>= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >>= uint64_ts)>::value, "");
+(uint32_ts >>= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts >>= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts >>= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >>= bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >>= ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >>= uints)>::value, "");
+(uint64_ts >>= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts >>= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts >>= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts >>= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts >>= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >>= min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >>= min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >>= min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >>= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >>= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >>= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >>= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >>= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >>= uint64_ts)>::value, "");
+(uint64_ts >>= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts >>= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts >>= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(float16_ts >>= bools);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= min16ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= min12ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= min16uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= int16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= int32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= int64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= uint16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= uint32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= uint64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts >>= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float32_ts >>= bools);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= min16ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= min12ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= min16uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= int16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= int32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= int64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= uint16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= uint32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= uint64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts >>= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float64_ts >>= bools);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= min16ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= min12ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= min16uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= int16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= int32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= int64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= uint16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= uint32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= uint64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts >>= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(bools &= bools);                /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools &= ints);                 /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools &= uints);                /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools &= halfs);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools &= floats);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools &= doubles);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools &= min16floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools &= min10floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools &= min16ints);            /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools &= min12ints);            /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools &= min16uints);           /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools &= int16_ts);             /* fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(bools &= int32_ts);             /* fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(bools &= int64_ts);             /* fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(bools &= uint16_ts);            /* fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(bools &= uint32_ts);            /* fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(bools &= uint64_ts);            /* fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(bools &= float16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(bools &= float32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(bools &= float64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints &= bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints &= ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints &= uints)>::value, "");
+(ints &= halfs);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints &= floats);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints &= doubles);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints &= min16floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints &= min10floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(ints &= min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints &= min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints &= min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints &= int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints &= int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints &= int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints &= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints &= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints &= uint64_ts)>::value, "");
+(ints &= float16_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(ints &= float32_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(ints &= float64_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uints &= bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints &= ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints &= uints)>::value, "");
+(uints &= halfs);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints &= floats);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints &= doubles);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints &= min16floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints &= min10floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<uint, __decltype(uints &= min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints &= min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints &= min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints &= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints &= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints &= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints &= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints &= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints &= uint64_ts)>::value, "");
+(uints &= float16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(uints &= float32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(uints &= float64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(halfs &= bools);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs &= ints);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs &= uints);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs &= halfs);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs &= floats);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs &= doubles);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs &= min16floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs &= min10floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs &= min16ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs &= min12ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs &= min16uints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs &= int16_ts);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(halfs &= int32_ts);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(halfs &= int64_ts);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(halfs &= uint16_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(halfs &= uint32_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(halfs &= uint64_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(halfs &= float16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(halfs &= float32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(halfs &= float64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(floats &= bools);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats &= ints);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats &= uints);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats &= halfs);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats &= floats);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats &= doubles);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats &= min16floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats &= min10floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats &= min16ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats &= min12ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats &= min16uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats &= int16_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(floats &= int32_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(floats &= int64_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(floats &= uint16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(floats &= uint32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(floats &= uint64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(floats &= float16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(floats &= float32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(floats &= float64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(doubles &= bools);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles &= ints);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles &= uints);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles &= halfs);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles &= floats);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles &= doubles);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles &= min16floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles &= min10floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles &= min16ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles &= min12ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles &= min16uints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles &= int16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(doubles &= int32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(doubles &= int64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(doubles &= uint16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(doubles &= uint32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(doubles &= uint64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(doubles &= float16_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(doubles &= float32_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(doubles &= float64_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(min16floats &= bools);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats &= ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats &= uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats &= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats &= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats &= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats &= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats &= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats &= min16ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats &= min12ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats &= min16uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats &= int16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(min16floats &= int32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(min16floats &= int64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(min16floats &= uint16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(min16floats &= uint32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(min16floats &= uint64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(min16floats &= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16floats &= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16floats &= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(min10floats &= bools);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats &= ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats &= uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats &= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats &= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats &= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats &= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats &= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats &= min16ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats &= min12ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats &= min16uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats &= int16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(min10floats &= int32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(min10floats &= int64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(min10floats &= uint16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(min10floats &= uint32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(min10floats &= uint64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(min10floats &= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min10floats &= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min10floats &= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints &= bools)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints &= ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints &= uints)>::value, "");
+(min16ints &= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints &= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints &= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints &= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints &= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints &= min16ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints &= min12ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints &= min16uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints &= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints &= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints &= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints &= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints &= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints &= uint64_ts)>::value, "");
+(min16ints &= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16ints &= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16ints &= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints &= bools)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints &= ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints &= uints)>::value, "");
+(min12ints &= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints &= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints &= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints &= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints &= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints &= min16ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints &= min12ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints &= min16uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints &= int16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints &= int32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints &= int64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints &= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints &= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints &= uint64_ts)>::value, "");
+(min12ints &= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min12ints &= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min12ints &= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints &= bools)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints &= ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints &= uints)>::value, "");
+(min16uints &= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints &= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints &= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints &= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints &= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints &= min16ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints &= min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints &= min16uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints &= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints &= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints &= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints &= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints &= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints &= uint64_ts)>::value, "");
+(min16uints &= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16uints &= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16uints &= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts &= bools)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts &= ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts &= uints)>::value, "");
+(int16_ts &= halfs);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts &= floats);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts &= doubles);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts &= min16floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts &= min10floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts &= min16ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts &= min12ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts &= min16uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts &= int16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts &= int32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts &= int64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts &= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts &= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts &= uint64_ts)>::value, "");
+(int16_ts &= float16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts &= float32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts &= float64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts &= bools)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts &= ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts &= uints)>::value, "");
+(int32_ts &= halfs);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts &= floats);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts &= doubles);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts &= min16floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts &= min10floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts &= min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts &= min12ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts &= min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts &= int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts &= int32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts &= int64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts &= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts &= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts &= uint64_ts)>::value, "");
+(int32_ts &= float16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts &= float32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts &= float64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts &= bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts &= ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts &= uints)>::value, "");
+(int64_ts &= halfs);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts &= floats);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts &= doubles);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts &= min16floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts &= min10floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts &= min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts &= min12ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts &= min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts &= int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts &= int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts &= int64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts &= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts &= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts &= uint64_ts)>::value, "");
+(int64_ts &= float16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts &= float32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts &= float64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts &= bools)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts &= ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts &= uints)>::value, "");
+(uint16_ts &= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts &= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts &= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts &= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts &= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts &= min16ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts &= min12ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts &= min16uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts &= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts &= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts &= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts &= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts &= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts &= uint64_ts)>::value, "");
+(uint16_ts &= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts &= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts &= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts &= bools)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts &= ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts &= uints)>::value, "");
+(uint32_ts &= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts &= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts &= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts &= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts &= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts &= min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts &= min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts &= min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts &= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts &= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts &= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts &= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts &= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts &= uint64_ts)>::value, "");
+(uint32_ts &= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts &= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts &= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts &= bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts &= ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts &= uints)>::value, "");
+(uint64_ts &= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts &= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts &= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts &= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts &= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts &= min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts &= min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts &= min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts &= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts &= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts &= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts &= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts &= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts &= uint64_ts)>::value, "");
+(uint64_ts &= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts &= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts &= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(float16_ts &= bools);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= uints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= min16ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= min12ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= min16uints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= int16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= int32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= int64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= uint16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= uint32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= uint64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts &= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float32_ts &= bools);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= uints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= min16ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= min12ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= min16uints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= int16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= int32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= int64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= uint16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= uint32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= uint64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts &= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float64_ts &= bools);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= uints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= min16ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= min12ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= min16uints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= int16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= int32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= int64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= uint16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= uint32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= uint64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts &= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(bools |= bools);                /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools |= ints);                 /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools |= uints);                /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools |= halfs);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools |= floats);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools |= doubles);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools |= min16floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools |= min10floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools |= min16ints);            /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools |= min12ints);            /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools |= min16uints);           /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools |= int16_ts);             /* fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(bools |= int32_ts);             /* fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(bools |= int64_ts);             /* fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(bools |= uint16_ts);            /* fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(bools |= uint32_ts);            /* fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(bools |= uint64_ts);            /* fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(bools |= float16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(bools |= float32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(bools |= float64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints |= bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints |= ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints |= uints)>::value, "");
+(ints |= halfs);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints |= floats);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints |= doubles);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints |= min16floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints |= min10floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(ints |= min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints |= min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints |= min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints |= int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints |= int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints |= int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints |= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints |= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints |= uint64_ts)>::value, "");
+(ints |= float16_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(ints |= float32_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(ints |= float64_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uints |= bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints |= ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints |= uints)>::value, "");
+(uints |= halfs);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints |= floats);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints |= doubles);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints |= min16floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints |= min10floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<uint, __decltype(uints |= min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints |= min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints |= min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints |= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints |= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints |= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints |= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints |= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints |= uint64_ts)>::value, "");
+(uints |= float16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(uints |= float32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(uints |= float64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(halfs |= bools);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs |= ints);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs |= uints);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs |= halfs);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs |= floats);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs |= doubles);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs |= min16floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs |= min10floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs |= min16ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs |= min12ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs |= min16uints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs |= int16_ts);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(halfs |= int32_ts);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(halfs |= int64_ts);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(halfs |= uint16_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(halfs |= uint32_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(halfs |= uint64_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(halfs |= float16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(halfs |= float32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(halfs |= float64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(floats |= bools);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats |= ints);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats |= uints);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats |= halfs);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats |= floats);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats |= doubles);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats |= min16floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats |= min10floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats |= min16ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats |= min12ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats |= min16uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats |= int16_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(floats |= int32_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(floats |= int64_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(floats |= uint16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(floats |= uint32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(floats |= uint64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(floats |= float16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(floats |= float32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(floats |= float64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(doubles |= bools);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles |= ints);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles |= uints);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles |= halfs);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles |= floats);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles |= doubles);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles |= min16floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles |= min10floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles |= min16ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles |= min12ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles |= min16uints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles |= int16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(doubles |= int32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(doubles |= int64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(doubles |= uint16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(doubles |= uint32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(doubles |= uint64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(doubles |= float16_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(doubles |= float32_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(doubles |= float64_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(min16floats |= bools);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats |= ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats |= uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats |= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats |= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats |= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats |= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats |= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats |= min16ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats |= min12ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats |= min16uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats |= int16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(min16floats |= int32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(min16floats |= int64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(min16floats |= uint16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(min16floats |= uint32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(min16floats |= uint64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(min16floats |= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16floats |= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16floats |= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(min10floats |= bools);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats |= ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats |= uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats |= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats |= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats |= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats |= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats |= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats |= min16ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats |= min12ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats |= min16uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats |= int16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(min10floats |= int32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(min10floats |= int64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(min10floats |= uint16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(min10floats |= uint32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(min10floats |= uint64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(min10floats |= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min10floats |= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min10floats |= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints |= bools)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints |= ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints |= uints)>::value, "");
+(min16ints |= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints |= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints |= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints |= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints |= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints |= min16ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints |= min12ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints |= min16uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints |= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints |= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints |= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints |= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints |= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints |= uint64_ts)>::value, "");
+(min16ints |= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16ints |= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16ints |= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints |= bools)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints |= ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints |= uints)>::value, "");
+(min12ints |= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints |= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints |= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints |= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints |= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints |= min16ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints |= min12ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints |= min16uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints |= int16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints |= int32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints |= int64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints |= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints |= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints |= uint64_ts)>::value, "");
+(min12ints |= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min12ints |= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min12ints |= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints |= bools)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints |= ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints |= uints)>::value, "");
+(min16uints |= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints |= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints |= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints |= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints |= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints |= min16ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints |= min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints |= min16uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints |= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints |= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints |= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints |= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints |= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints |= uint64_ts)>::value, "");
+(min16uints |= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16uints |= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16uints |= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts |= bools)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts |= ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts |= uints)>::value, "");
+(int16_ts |= halfs);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts |= floats);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts |= doubles);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts |= min16floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts |= min10floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts |= min16ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts |= min12ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts |= min16uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts |= int16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts |= int32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts |= int64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts |= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts |= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts |= uint64_ts)>::value, "");
+(int16_ts |= float16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts |= float32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts |= float64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts |= bools)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts |= ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts |= uints)>::value, "");
+(int32_ts |= halfs);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts |= floats);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts |= doubles);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts |= min16floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts |= min10floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts |= min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts |= min12ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts |= min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts |= int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts |= int32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts |= int64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts |= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts |= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts |= uint64_ts)>::value, "");
+(int32_ts |= float16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts |= float32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts |= float64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts |= bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts |= ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts |= uints)>::value, "");
+(int64_ts |= halfs);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts |= floats);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts |= doubles);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts |= min16floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts |= min10floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts |= min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts |= min12ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts |= min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts |= int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts |= int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts |= int64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts |= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts |= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts |= uint64_ts)>::value, "");
+(int64_ts |= float16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts |= float32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts |= float64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts |= bools)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts |= ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts |= uints)>::value, "");
+(uint16_ts |= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts |= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts |= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts |= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts |= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts |= min16ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts |= min12ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts |= min16uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts |= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts |= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts |= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts |= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts |= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts |= uint64_ts)>::value, "");
+(uint16_ts |= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts |= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts |= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts |= bools)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts |= ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts |= uints)>::value, "");
+(uint32_ts |= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts |= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts |= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts |= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts |= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts |= min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts |= min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts |= min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts |= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts |= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts |= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts |= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts |= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts |= uint64_ts)>::value, "");
+(uint32_ts |= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts |= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts |= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts |= bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts |= ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts |= uints)>::value, "");
+(uint64_ts |= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts |= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts |= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts |= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts |= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts |= min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts |= min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts |= min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts |= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts |= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts |= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts |= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts |= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts |= uint64_ts)>::value, "");
+(uint64_ts |= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts |= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts |= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(float16_ts |= bools);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= uints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= min16ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= min12ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= min16uints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= int16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= int32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= int64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= uint16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= uint32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= uint64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts |= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float32_ts |= bools);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= uints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= min16ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= min12ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= min16uints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= int16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= int32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= int64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= uint16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= uint32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= uint64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts |= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float64_ts |= bools);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= uints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= min16ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= min12ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= min16uints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= int16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= int32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= int64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= uint16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= uint32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= uint64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts |= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(bools ^= bools);                /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools ^= ints);                 /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools ^= uints);                /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools ^= halfs);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools ^= floats);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools ^= doubles);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools ^= min16floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools ^= min10floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(bools ^= min16ints);            /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools ^= min12ints);            /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools ^= min16uints);           /* fxc-error {{X3020: operator cannot be used with a bool lvalue}} */
+(bools ^= int16_ts);             /* fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(bools ^= int32_ts);             /* fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(bools ^= int64_ts);             /* fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(bools ^= uint16_ts);            /* fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(bools ^= uint32_ts);            /* fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(bools ^= uint64_ts);            /* fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(bools ^= float16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(bools ^= float32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(bools ^= float64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints ^= bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^= ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^= uints)>::value, "");
+(ints ^= halfs);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints ^= floats);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints ^= doubles);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints ^= min16floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(ints ^= min10floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(ints ^= min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^= min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^= min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^= int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^= int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^= int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^= uint64_ts)>::value, "");
+(ints ^= float16_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(ints ^= float32_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(ints ^= float64_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uints ^= bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^= ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^= uints)>::value, "");
+(uints ^= halfs);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints ^= floats);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints ^= doubles);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints ^= min16floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(uints ^= min10floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<uint, __decltype(uints ^= min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^= min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^= min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^= uint64_ts)>::value, "");
+(uints ^= float16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(uints ^= float32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(uints ^= float64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(halfs ^= bools);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs ^= ints);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs ^= uints);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs ^= halfs);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs ^= floats);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs ^= doubles);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs ^= min16floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs ^= min10floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs ^= min16ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs ^= min12ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs ^= min16uints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(halfs ^= int16_ts);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(halfs ^= int32_ts);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(halfs ^= int64_ts);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(halfs ^= uint16_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(halfs ^= uint32_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(halfs ^= uint64_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(halfs ^= float16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(halfs ^= float32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(halfs ^= float64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(floats ^= bools);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats ^= ints);                /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats ^= uints);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats ^= halfs);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats ^= floats);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats ^= doubles);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats ^= min16floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats ^= min10floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats ^= min16ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats ^= min12ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats ^= min16uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(floats ^= int16_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(floats ^= int32_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(floats ^= int64_ts);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(floats ^= uint16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(floats ^= uint32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(floats ^= uint64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(floats ^= float16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(floats ^= float32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(floats ^= float64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(doubles ^= bools);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles ^= ints);               /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles ^= uints);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles ^= halfs);              /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles ^= floats);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles ^= doubles);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles ^= min16floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles ^= min10floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles ^= min16ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles ^= min12ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles ^= min16uints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(doubles ^= int16_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(doubles ^= int32_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(doubles ^= int64_ts);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(doubles ^= uint16_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(doubles ^= uint32_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(doubles ^= uint64_ts);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(doubles ^= float16_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(doubles ^= float32_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(doubles ^= float64_ts);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(min16floats ^= bools);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats ^= ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats ^= uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats ^= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats ^= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats ^= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats ^= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats ^= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats ^= min16ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats ^= min12ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats ^= min16uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16floats ^= int16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(min16floats ^= int32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(min16floats ^= int64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(min16floats ^= uint16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(min16floats ^= uint32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(min16floats ^= uint64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(min16floats ^= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16floats ^= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16floats ^= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(min10floats ^= bools);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats ^= ints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats ^= uints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats ^= halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats ^= floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats ^= doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats ^= min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats ^= min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats ^= min16ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats ^= min12ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats ^= min16uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min10floats ^= int16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(min10floats ^= int32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(min10floats ^= int64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(min10floats ^= uint16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(min10floats ^= uint32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(min10floats ^= uint64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(min10floats ^= float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min10floats ^= float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min10floats ^= float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^= bools)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^= ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^= uints)>::value, "");
+(min16ints ^= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints ^= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints ^= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints ^= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16ints ^= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^= min16ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^= min12ints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^= min16uints)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^= uint64_ts)>::value, "");
+(min16ints ^= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16ints ^= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16ints ^= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^= bools)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^= ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^= uints)>::value, "");
+(min12ints ^= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints ^= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints ^= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints ^= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min12ints ^= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^= min16ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^= min12ints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^= min16uints)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^= int16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^= int32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^= int64_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^= uint64_ts)>::value, "");
+(min12ints ^= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min12ints ^= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min12ints ^= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^= bools)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^= ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^= uints)>::value, "");
+(min16uints ^= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints ^= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints ^= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints ^= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+(min16uints ^= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^= min16ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^= min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^= min16uints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^= int16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^= int32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^= int64_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^= uint16_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^= uint32_ts)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^= uint64_ts)>::value, "");
+(min16uints ^= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(min16uints ^= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(min16uints ^= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^= bools)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^= ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^= uints)>::value, "");
+(int16_ts ^= halfs);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts ^= floats);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts ^= doubles);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts ^= min16floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts ^= min10floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^= min16ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^= min12ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^= min16uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^= int16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^= int32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^= int64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^= uint64_ts)>::value, "");
+(int16_ts ^= float16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts ^= float32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+(int16_ts ^= float64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^= bools)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^= ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^= uints)>::value, "");
+(int32_ts ^= halfs);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts ^= floats);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts ^= doubles);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts ^= min16floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts ^= min10floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^= min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^= min12ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^= min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^= int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^= int32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^= int64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^= uint64_ts)>::value, "");
+(int32_ts ^= float16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts ^= float32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+(int32_ts ^= float64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^= bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^= ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^= uints)>::value, "");
+(int64_ts ^= halfs);             /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts ^= floats);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts ^= doubles);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts ^= min16floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts ^= min10floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^= min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^= min12ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^= min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^= int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^= int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^= int64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^= uint16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^= uint32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^= uint64_ts)>::value, "");
+(int64_ts ^= float16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts ^= float32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+(int64_ts ^= float64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^= bools)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^= ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^= uints)>::value, "");
+(uint16_ts ^= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts ^= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts ^= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts ^= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts ^= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^= min16ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^= min12ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^= min16uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^= uint64_ts)>::value, "");
+(uint16_ts ^= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts ^= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+(uint16_ts ^= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^= bools)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^= ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^= uints)>::value, "");
+(uint32_ts ^= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts ^= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts ^= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts ^= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts ^= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^= min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^= min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^= min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^= uint64_ts)>::value, "");
+(uint32_ts ^= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts ^= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+(uint32_ts ^= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^= bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^= ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^= uints)>::value, "");
+(uint64_ts ^= halfs);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts ^= floats);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts ^= doubles);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts ^= min16floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts ^= min10floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^= min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^= min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^= min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^= int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^= int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^= int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^= uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^= uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^= uint64_ts)>::value, "");
+(uint64_ts ^= float16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts ^= float32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(uint64_ts ^= float64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+(float16_ts ^= bools);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= uints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= min16ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= min12ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= min16uints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= int16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= int32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= int64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= uint16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= uint32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= uint64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float16_ts ^= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+(float32_ts ^= bools);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= uints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= min16ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= min12ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= min16uints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= int16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= int32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= int64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= uint16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= uint32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= uint64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float32_ts ^= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+(float64_ts ^= bools);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= ints);            /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= uints);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= min16ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= min12ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= min16uints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= int16_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= int32_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= int64_ts);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= uint16_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= uint32_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= uint64_ts);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+(float64_ts ^= float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+// GENERATED_ASSIGN:END
+
+
+}

+ 6119 - 2555
tools/clang/test/HLSL/scalar-operators-exact-precision.hlsl

@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -no-min-precision -fsyntax-only -Wno-unused-value -ffreestanding -verify %s
+// RUN: %clang_cc1 -enable-16bit-types -fsyntax-only -Wno-unused-value -ffreestanding -verify -HV 2018 %s
 
 // we use -Wno-unused-value because we generate some no-op expressions to yield errors
 // without also putting them in a static assertion
@@ -23,2569 +23,6133 @@ float4 plain(float4 param4 : FOO) : FOO {
     half        halfs       = 0;
     float       floats      = 0;
     double      doubles     = 0;
-    min16float  min16floats = 0; /* expected-warning {{min16float is promoted to half}} */
-    min10float  min10floats = 0; // expected-warning {{min10float is promoted to half}}
-    min16int    min16ints   = 0; /* expected-warning {{min16int is promoted to int}} */
-    min12int    min12ints   = 0; // expected-warning {{min12int is promoted to min16int}}
-    min16uint   min16uints  = 0; /* expected-warning {{min16uint is promoted to uint}} */
+    min16float  min16floats = 0; /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+    min10float  min10floats = 0; // expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}}
+    min16int    min16ints   = 0; /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+    min12int    min12ints   = 0; // expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}}
+    min16uint   min16uints  = 0; /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+    int16_t     int16_ts    = 0; /* fxc-error {{X3000: unrecognized identifier 'int16_t'}} fxc-error {{X3000: unrecognized identifier 'int16_ts'}} */
+    int32_t     int32_ts    = 0; /* fxc-error {{X3000: unrecognized identifier 'int32_t'}} fxc-error {{X3000: unrecognized identifier 'int32_ts'}} */
+    int64_t     int64_ts    = 0; /* fxc-error {{X3000: unrecognized identifier 'int64_t'}} fxc-error {{X3000: unrecognized identifier 'int64_ts'}} */
+    uint16_t    uint16_ts   = 0; /* fxc-error {{X3000: unrecognized identifier 'uint16_t'}} fxc-error {{X3000: unrecognized identifier 'uint16_ts'}} */
+    uint32_t    uint32_ts   = 0; /* fxc-error {{X3000: unrecognized identifier 'uint32_t'}} fxc-error {{X3000: unrecognized identifier 'uint32_ts'}} */
+    uint64_t    uint64_ts   = 0; /* fxc-error {{X3000: unrecognized identifier 'uint64_t'}} fxc-error {{X3000: unrecognized identifier 'uint64_ts'}} */
+    float16_t   float16_ts  = 0; /* fxc-error {{X3000: unrecognized identifier 'float16_t'}} fxc-error {{X3000: unrecognized identifier 'float16_ts'}} */
+    float32_t   float32_ts  = 0; /* fxc-error {{X3000: unrecognized identifier 'float32_t'}} fxc-error {{X3000: unrecognized identifier 'float32_ts'}} */
+    float64_t   float64_ts  = 0; /* fxc-error {{X3000: unrecognized identifier 'float64_t'}} fxc-error {{X3000: unrecognized identifier 'float64_ts'}} */
 
-    // _Static_assert(std::is_same<bool, bool>::value, "bool, bool failed");
-    _Static_assert(std::is_same<bool, __decltype(bools)>::value, "bool, __decltype(bools) failed");
-    _Static_assert(std::is_same<bool, __decltype(bools < bools)>::value, "bool, __decltype(bools < bools) failed");
 
+// TODO: look for "expected-error {{static_assert failed ""}} fxc-pass {{}} " message and fix type conversions
+// Currently known issue exists when bool is combined with min precision types.
 
-    // float result = ints + floats;
-    _Static_assert(std::is_same<min16uint, __decltype(min16ints  + min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
+// To be generated by CoeTags
+/* <py>
+  primitiveTypes = [
+    ("bool", 32, False, False),
+    ("int", 32, False, False),
+    ("uint", 32, False, True),
+    ("half", 16, True, False),
+    ("float", 32, True, False),
+    ("double", 64, True, False),
+    ("min16float", 16, True, False),
+    ("min10float",10, True, False),
+    ("min16int", 16, False, False),
+    ("min12int", 12, False, False),
+    ("min16uint", 16, False, True),
+    ("int16_t", 16, False, False),
+    ("int32_t", 32, False, False),
+    ("int64_t", 64, False, False),
+    ("uint16_t", 16, False, True),
+    ("uint32_t", 32, False, True),
+    ("uint64_t", 64, False, True),
+    ("float16_t", 16, True, False),
+    ("float32_t", 32, True, False),
+    ("float64_t", 64, True, False),
+  ]
 
-    // Promotion cases with addition.
-    // Two unsigned types will widen to widest type.
-    _Static_assert(std::is_same<uint, __decltype(uints      + min16uints)>::value, "");
-    _Static_assert(std::is_same<uint, __decltype(min16uints + uints     )>::value, "");
+  ArithOperators = [ "+", "-", "/", "%"]
 
-    // Two signed types will widen to widest type, but remain minprecision if either is.
-    _Static_assert(std::is_same<int, __decltype(ints      + min12ints)>::value, "");
-    _Static_assert(std::is_same<int, __decltype(min12ints + ints     )>::value, "");
+  # Comparison
+  OrderOperators = [ "<", "<=", ">", ">=", ]
 
-    // Mixed signed-unsigned will widen to largest unsigned.
-    _Static_assert(std::is_same<uint, __decltype(ints  + uints)>::value, "");
-    _Static_assert(std::is_same<uint, __decltype(uints + ints )>::value, "");
-    _Static_assert(std::is_same<min16uint, __decltype(min16ints  + min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-    _Static_assert(std::is_same<min16uint, __decltype(min16uints + min16ints )>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
+  LogicalOperators = [ "&&", "||" ]
 
-    // Mixed integral/floating point will turn to floating-point.
-    _Static_assert(std::is_same<float, __decltype(ints    + floats)>::value, "");
-    _Static_assert(std::is_same<float, __decltype(uints   + floats)>::value, "");
-    _Static_assert(std::is_same<double, __decltype(doubles + ints)>::value, "");
-    _Static_assert(std::is_same<double, __decltype(uints   + doubles)>::value, "");
+  # Shift
+  ShiftOperators = [ "<<", ">>" ]
 
-    // For two floating-point types, they will widen to the largest one.
-    _Static_assert(std::is_same<double, __decltype(doubles + floats)>::value, "");
-    _Static_assert(std::is_same<double, __decltype(floats  + doubles)>::value, "");
-    _Static_assert(std::is_same<double, __decltype(doubles     + min16floats)>::value, "");
-    _Static_assert(std::is_same<double, __decltype(min16floats + doubles)>::value, "");
-    _Static_assert(std::is_same<double, __decltype(doubles     + min10floats)>::value, "");
-    _Static_assert(std::is_same<double, __decltype(min10floats + doubles)>::value, "");
-    _Static_assert(std::is_same<float , __decltype(floats      + min16floats)>::value, "");
-    _Static_assert(std::is_same<float , __decltype(min16floats + floats)>::value, "");
-    _Static_assert(std::is_same<float , __decltype(floats      + min10floats)>::value, "");
-    _Static_assert(std::is_same<float , __decltype(min10floats + floats)>::value, "");
+  # Bitwise
+  BitWiseOperators = [ "&", "|", "^" ]
 
-  // Generated by running and modifying %sdxroot%\windows\directx\dxg\HLSL\test\lib\HLSL\operators.js
-  _Static_assert(std::is_same<int, __decltype(bools + bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools + ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools + uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(bools + halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(bools + floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(bools + doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(bools + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(bools + min10floats)>::value, ""); // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<int, __decltype(bools + min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools + min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools + min16uints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints + bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints + ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints + uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(ints + halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(ints + floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(ints + doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(ints + min16floats)>::value, "");  /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(ints + min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<int, __decltype(ints + min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints + min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints + min16uints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints + bools)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints + ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints + uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(uints + halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(uints + floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(uints + doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(uints + min16floats)>::value, ""); /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(uints + min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<uint, __decltype(uints + min16ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints + min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints + min16uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs + bools)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs + ints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs + uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs + halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(halfs + floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(halfs + doubles)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs + min16floats)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs + min10floats)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs + min16ints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs + min12ints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs + min16uints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats + bools)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats + ints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats + uints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats + halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats + floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(floats + doubles)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats + min16floats)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats + min10floats)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats + min16ints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats + min12ints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats + min16uints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles + bools)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles + ints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles + uints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles + halfs)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles + floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles + doubles)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles + min16floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles + min10floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles + min16ints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles + min12ints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles + min16uints)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min16floats + bools)>::value, "");  /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats + ints)>::value, "");   /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats + uints)>::value, "");  /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<half, __decltype(min16floats + halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min16floats + floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min16floats + doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min16floats + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats + min10floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats + min16ints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats + min12ints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats + min16uints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min10floats + bools)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats + ints)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats + uints)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<half, __decltype(min10floats + halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min10floats + floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min10floats + doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min10floats + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min10floats + min10floats)>::value, ""); // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats + min16ints)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats + min12ints)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats + min16uints)>::value, ""); // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints + bools)>::value, "");          /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<int, __decltype(min16ints + ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16ints + uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(min16ints + halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min16ints + floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min16ints + doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min16ints + min16floats)>::value, "");  /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min16ints + min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints + min16ints)>::value, "");      /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints + min12ints)>::value, "");      /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16ints + min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min12int, __decltype(min12ints + bools)>::value, "");   // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<int, __decltype(min12ints + ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min12ints + uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(min12ints + halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min12ints + floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min12ints + doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min12ints + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min12ints + min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min16int, __decltype(min12ints + min16ints)>::value, "");      /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min12int, __decltype(min12ints + min12ints)>::value, "");    // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min16uint, __decltype(min12ints + min16uints)>::value, "");  /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints + bools)>::value, "");      /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<uint, __decltype(min16uints + ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16uints + uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(min16uints + halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min16uints + floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min16uints + doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min16uints + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min16uints + min10floats)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints + min16ints)>::value, "");      /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints + min12ints)>::value, "");      /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints + min16uints)>::value, "");     /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<int, __decltype(bools - bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools - ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools - uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(bools - halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(bools - floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(bools - doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(bools - min16floats)>::value, "");        /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(bools - min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<int, __decltype(bools - min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools - min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools - min16uints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints - bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints - ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints - uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(ints - halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(ints - floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(ints - doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(ints - min16floats)>::value, "");   /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(ints - min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<int, __decltype(ints - min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints - min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints - min16uints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints - bools)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints - ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints - uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(uints - halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(uints - floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(uints - doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(uints - min16floats)>::value, ""); /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(uints - min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<uint, __decltype(uints - min16ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints - min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints - min16uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs - bools)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs - ints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs - uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs - halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(halfs - floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(halfs - doubles)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs - min16floats)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs - min10floats)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs - min16ints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs - min12ints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs - min16uints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats - bools)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats - ints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats - uints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats - halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats - floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(floats - doubles)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats - min16floats)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats - min10floats)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats - min16ints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats - min12ints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats - min16uints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles - bools)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles - ints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles - uints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles - halfs)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles - floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles - doubles)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles - min16floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles - min10floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles - min16ints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles - min12ints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles - min16uints)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min16floats - bools)>::value, "");  /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats - ints)>::value, "");   /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats - uints)>::value, "");  /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<half, __decltype(min16floats - halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min16floats - floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min16floats - doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min16floats - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats - min10floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats - min16ints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats - min12ints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats - min16uints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min10floats - bools)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats - ints)>::value, "");    // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats - uints)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<half, __decltype(min10floats - halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min10floats - floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min10floats - doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min10floats - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min10floats - min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats - min16ints)>::value, "");    // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats - min12ints)>::value, "");    // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats - min16uints)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints - bools)>::value, "");            /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<int, __decltype(min16ints - ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16ints - uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(min16ints - halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min16ints - floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min16ints - doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min16ints - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min16ints - min10floats)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints - min16ints)>::value, "");       /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints - min12ints)>::value, "");       /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16ints - min16uints)>::value, "");     /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min12int, __decltype(min12ints - bools)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<int, __decltype(min12ints - ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min12ints - uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(min12ints - halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min12ints - floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min12ints - doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min12ints - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min12ints - min10floats)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min16int, __decltype(min12ints - min16ints)>::value, "");       /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min12int, __decltype(min12ints - min12ints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min16uint, __decltype(min12ints - min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints - bools)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<uint, __decltype(min16uints - ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16uints - uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(min16uints - halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min16uints - floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min16uints - doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min16uints - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min16uints - min10floats)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints - min16ints)>::value, "");      /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints - min12ints)>::value, "");      /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints - min16uints)>::value, "");     /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<int, __decltype(bools / bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools / ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools / uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(bools / halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(bools / floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(bools / doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(bools / min16floats)>::value, "");        /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(bools / min10floats)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<int, __decltype(bools / min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools / min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools / min16uints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints / bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints / ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints / uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(ints / halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(ints / floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(ints / doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(ints / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(ints / min10floats)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<int, __decltype(ints / min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints / min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints / min16uints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints / bools)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints / ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints / uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(uints / halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(uints / floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(uints / doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(uints / min16floats)>::value, "");  /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(uints / min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<uint, __decltype(uints / min16ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints / min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints / min16uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs / bools)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs / ints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs / uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs / halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(halfs / floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(halfs / doubles)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs / min16floats)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs / min10floats)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs / min16ints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs / min12ints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs / min16uints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats / bools)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats / ints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats / uints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats / halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats / floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(floats / doubles)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats / min16floats)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats / min10floats)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats / min16ints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats / min12ints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats / min16uints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles / bools)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles / ints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles / uints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles / halfs)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles / floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles / doubles)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles / min16floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles / min10floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles / min16ints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles / min12ints)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(doubles / min16uints)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min16floats / bools)>::value, "");  /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats / ints)>::value, "");   /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats / uints)>::value, "");  /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<half, __decltype(min16floats / halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min16floats / floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min16floats / doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min16floats / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats / min10floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats / min16ints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats / min12ints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats / min16uints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min10floats / bools)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats / ints)>::value, "");    // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats / uints)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<half, __decltype(min10floats / halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min10floats / floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min10floats / doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min10floats / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min10floats / min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats / min16ints)>::value, "");    // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats / min12ints)>::value, "");    // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats / min16uints)>::value, "");   // expected-warning {{min10float is promoted to half}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3706: signed integer division is not supported on minimum-precision types. Cast to int to use 32-bit division.;compilation failed; no code produced;
-  min16ints = (min16ints / bools); // fxc-error {{X3706: signed integer division is not supported on minimum-precision types. Cast to int to use 32-bit division.}}
-  _Static_assert(std::is_same<int, __decltype(min16ints / ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16ints / uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(min16ints / halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min16ints / floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min16ints / doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min16ints / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min16ints / min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3706: signed integer division is not supported on minimum-precision types. Cast to int to use 32-bit division.;compilation failed; no code produced;
-  min16ints = (min16ints / min16ints); // fxc-error {{X3706: signed integer division is not supported on minimum-precision types. Cast to int to use 32-bit division.}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3706: signed integer division is not supported on minimum-precision types. Cast to int to use 32-bit division.;compilation failed; no code produced;
-  min16ints = (min16ints / min12ints); // fxc-error {{X3706: signed integer division is not supported on minimum-precision types. Cast to int to use 32-bit division.}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16ints / min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3706: signed integer division is not supported on minimum-precision types. Cast to int to use 32-bit division.;compilation failed; no code produced;
-  min12ints = (min12ints / bools); // fxc-error {{X3706: signed integer division is not supported on minimum-precision types. Cast to int to use 32-bit division.}}
-  _Static_assert(std::is_same<int, __decltype(min12ints / ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min12ints / uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(min12ints / halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min12ints / floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min12ints / doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min12ints / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min12ints / min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3706: signed integer division is not supported on minimum-precision types. Cast to int to use 32-bit division.;compilation failed; no code produced;
-  min12ints = (min12ints / min16ints); // fxc-error {{X3706: signed integer division is not supported on minimum-precision types. Cast to int to use 32-bit division.}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3706: signed integer division is not supported on minimum-precision types. Cast to int to use 32-bit division.;compilation failed; no code produced;
-  min12ints = (min12ints / min12ints); // fxc-error {{X3706: signed integer division is not supported on minimum-precision types. Cast to int to use 32-bit division.}}
-  _Static_assert(std::is_same<min16uint, __decltype(min12ints / min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints / bools)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<uint, __decltype(min16uints / ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16uints / uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(min16uints / halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min16uints / floats)>::value, "");
-  _Static_assert(std::is_same<double, __decltype(min16uints / doubles)>::value, "");
-  _Static_assert(std::is_same<min16float, __decltype(min16uints / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min16uints / min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints / min16ints)>::value, "");     /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints / min12ints)>::value, "");     /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints / min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<int, __decltype(bools % bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools % ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools % uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(bools % halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(bools % floats)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  bools = (bools % doubles); // expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}}
-  _Static_assert(std::is_same<min16float, __decltype(bools % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(bools % min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<int, __decltype(bools % min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools % min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools % min16uints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints % bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints % ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints % uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(ints % halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(ints % floats)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  ints = (ints % doubles); // expected-error {{modulo cannot be used with doubles, cast to float first}} expected-warning {{conversion from larger type 'double' to smaller type 'int', possible loss of data}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-  _Static_assert(std::is_same<min16float, __decltype(ints % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(ints % min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<int, __decltype(ints % min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints % min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints % min16uints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints % bools)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints % ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints % uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(uints % halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(uints % floats)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  uints = (uints % doubles); // expected-error {{modulo cannot be used with doubles, cast to float first}} expected-warning {{conversion from larger type 'double' to smaller type 'uint', possible loss of data}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-  _Static_assert(std::is_same<min16float, __decltype(uints % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(uints % min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<uint, __decltype(uints % min16ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints % min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints % min16uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs % bools)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs % ints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs % uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs % halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(halfs % floats)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  halfs = (halfs % doubles); // expected-error {{modulo cannot be used with doubles, cast to float first}} expected-warning {{conversion from larger type 'double' to smaller type 'half', possible loss of data}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-  _Static_assert(std::is_same<half, __decltype(halfs % min16floats)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs % min10floats)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs % min16ints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs % min12ints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(halfs % min16uints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats % bools)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats % ints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats % uints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats % halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats % floats)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  floats = (floats % doubles); // expected-error {{modulo cannot be used with doubles, cast to float first}} expected-warning {{conversion from larger type 'double' to smaller type 'float', possible loss of data}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-  _Static_assert(std::is_same<float, __decltype(floats % min16floats)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats % min10floats)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats % min16ints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats % min12ints)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(floats % min16uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  doubles = (doubles % bools); // expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  doubles = (doubles % ints); // expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  doubles = (doubles % uints); // expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  doubles = (doubles % halfs); // expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  doubles = (doubles % floats); // expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  doubles = (doubles % doubles); // expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  doubles = (doubles % min16floats); // expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  doubles = (doubles % min10floats); // expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  doubles = (doubles % min16ints); // expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  doubles = (doubles % min12ints); // expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  doubles = (doubles % min16uints); // expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}}
-  _Static_assert(std::is_same<min16float, __decltype(min16floats % bools)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats % ints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats % uints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<half, __decltype(min16floats % halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min16floats % floats)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  min16floats = (min16floats % doubles); // expected-error {{modulo cannot be used with doubles, cast to float first}} expected-warning {{conversion from larger type 'double' to smaller type 'min16float', possible loss of data}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-  _Static_assert(std::is_same<min16float, __decltype(min16floats % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats % min10floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats % min16ints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats % min12ints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min16float, __decltype(min16floats % min16uints)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min10floats % bools)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats % ints)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats % uints)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<half, __decltype(min10floats % halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min10floats % floats)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  min10floats = (min10floats % doubles); // expected-error {{modulo cannot be used with doubles, cast to float first}} expected-warning {{conversion from larger type 'double' to smaller type 'min10float', possible loss of data}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-  _Static_assert(std::is_same<min16float, __decltype(min10floats % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min10floats % min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats % min16ints)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats % min12ints)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min10float, __decltype(min10floats % min16uints)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3706: signed integer remainder is not supported on minimum-precision types. Cast to int to use 32-bit division.;compilation failed; no code produced;
-  min16ints = (min16ints % bools); // fxc-error {{X3706: signed integer remainder is not supported on minimum-precision types. Cast to int to use 32-bit division.}}
-  _Static_assert(std::is_same<int, __decltype(min16ints % ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16ints % uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(min16ints % halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min16ints % floats)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  min16ints = (min16ints % doubles); // expected-error {{modulo cannot be used with doubles, cast to float first}} expected-warning {{conversion from larger type 'double' to smaller type 'min16int', possible loss of data}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-  _Static_assert(std::is_same<min16float, __decltype(min16ints % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min16ints % min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3706: signed integer remainder is not supported on minimum-precision types. Cast to int to use 32-bit division.;compilation failed; no code produced;
-  min16ints = (min16ints % min16ints); // fxc-error {{X3706: signed integer remainder is not supported on minimum-precision types. Cast to int to use 32-bit division.}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3706: signed integer remainder is not supported on minimum-precision types. Cast to int to use 32-bit division.;compilation failed; no code produced;
-  min16ints = (min16ints % min12ints); // fxc-error {{X3706: signed integer remainder is not supported on minimum-precision types. Cast to int to use 32-bit division.}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16ints % min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3706: signed integer remainder is not supported on minimum-precision types. Cast to int to use 32-bit division.;compilation failed; no code produced;
-  min16ints = (min12ints % bools); // fxc-error {{X3706: signed integer remainder is not supported on minimum-precision types. Cast to int to use 32-bit division.}}
-  _Static_assert(std::is_same<int, __decltype(min12ints % ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min12ints % uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(min12ints % halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min12ints % floats)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  min16ints = (min12ints % doubles); // expected-error {{modulo cannot be used with doubles, cast to float first}} expected-warning {{conversion from larger type 'double' to smaller type 'min16int', possible loss of data}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-  _Static_assert(std::is_same<min16float, __decltype(min12ints % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min12ints % min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3706: signed integer remainder is not supported on minimum-precision types. Cast to int to use 32-bit division.;compilation failed; no code produced;
-  min16ints = (min12ints % min16ints); // fxc-error {{X3706: signed integer remainder is not supported on minimum-precision types. Cast to int to use 32-bit division.}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3706: signed integer remainder is not supported on minimum-precision types. Cast to int to use 32-bit division.;compilation failed; no code produced;
-  min16ints = (min12ints % min12ints); // fxc-error {{X3706: signed integer remainder is not supported on minimum-precision types. Cast to int to use 32-bit division.}}
-  _Static_assert(std::is_same<min16uint, __decltype(min12ints % min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints % bools)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<uint, __decltype(min16uints % ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16uints % uints)>::value, "");
-  _Static_assert(std::is_same<half, __decltype(min16uints % halfs)>::value, "");
-  _Static_assert(std::is_same<float, __decltype(min16uints % floats)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3684: modulo cannot be used with doubles, cast to float first;compilation failed; no code produced;
-  min16ints = (min16uints % doubles); // expected-error {{modulo cannot be used with doubles, cast to float first}} expected-warning {{conversion from larger type 'double' to smaller type 'min16int', possible loss of data}} fxc-error {{X3684: modulo cannot be used with doubles, cast to float first}} fxc-warning {{X3205: conversion from larger type to smaller, possible loss of data}}
-  _Static_assert(std::is_same<min16float, __decltype(min16uints % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to half}} */
-  _Static_assert(std::is_same<min10float, __decltype(min16uints % min10floats)>::value, "");  // expected-warning {{min10float is promoted to half}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints % min16ints)>::value, "");     /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints % min12ints)>::value, "");     /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints % min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<bool, __decltype(bools < bools)>::value, "bool, __decltype(bools < bools) failed");
-  _Static_assert(std::is_same<bool, __decltype(bools < ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools < uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools < halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools < floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools < doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools < min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools < min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools < min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools < min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools < min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints < bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints < ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints < uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints < halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints < floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints < doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints < min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints < min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints < min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints < min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints < min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints < bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints < ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints < uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints < halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints < floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints < doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints < min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints < min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints < min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints < min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints < min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs < bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs < ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs < uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs < halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs < floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs < doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs < min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs < min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs < min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs < min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs < min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats < bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats < ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats < uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats < halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats < floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats < doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats < min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats < min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats < min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats < min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats < min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles < bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles < ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles < uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles < halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles < floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles < doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles < min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles < min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles < min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles < min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles < min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats < bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats < ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats < uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats < halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats < floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats < doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats < min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats < min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats < min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats < min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats < min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats < bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats < ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats < uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats < halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats < floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats < doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats < min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats < min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats < min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats < min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats < min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints < bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints < ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints < uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints < halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints < floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints < doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints < min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints < min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints < min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints < min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints < min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints < bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints < ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints < uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints < halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints < floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints < doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints < min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints < min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints < min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints < min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints < min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints < bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints < ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints < uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints < halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints < floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints < doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints < min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints < min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints < min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints < min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints < min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools <= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools <= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools <= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools <= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools <= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools <= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools <= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools <= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools <= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools <= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools <= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints <= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints <= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints <= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints <= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints <= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints <= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints <= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints <= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints <= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints <= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints <= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints <= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints <= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints <= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints <= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints <= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints <= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints <= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints <= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints <= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints <= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints <= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs <= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs <= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs <= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs <= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs <= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs <= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs <= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs <= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs <= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs <= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs <= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats <= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats <= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats <= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats <= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats <= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats <= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats <= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats <= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats <= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats <= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats <= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles <= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles <= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles <= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles <= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles <= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles <= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles <= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles <= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles <= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles <= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles <= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats <= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats <= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats <= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats <= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats <= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats <= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats <= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats <= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats <= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats <= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats <= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats <= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats <= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats <= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats <= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats <= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats <= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats <= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats <= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats <= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats <= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats <= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints <= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints <= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints <= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints <= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints <= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints <= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints <= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints <= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints <= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints <= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints <= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints <= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints <= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints <= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints <= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints <= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints <= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints <= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints <= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints <= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints <= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints <= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints <= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints <= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints <= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints <= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints <= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints <= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints <= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints <= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints <= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints <= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints <= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools > bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools > ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools > uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools > halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools > floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools > doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools > min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools > min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools > min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools > min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools > min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints > bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints > ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints > uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints > halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints > floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints > doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints > min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints > min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints > min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints > min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints > min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints > bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints > ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints > uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints > halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints > floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints > doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints > min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints > min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints > min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints > min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints > min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs > bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs > ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs > uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs > halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs > floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs > doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs > min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs > min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs > min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs > min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs > min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats > bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats > ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats > uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats > halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats > floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats > doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats > min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats > min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats > min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats > min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats > min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles > bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles > ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles > uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles > halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles > floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles > doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles > min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles > min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles > min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles > min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles > min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats > bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats > ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats > uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats > halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats > floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats > doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats > min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats > min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats > min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats > min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats > min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats > bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats > ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats > uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats > halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats > floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats > doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats > min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats > min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats > min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats > min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats > min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints > bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints > ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints > uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints > halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints > floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints > doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints > min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints > min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints > min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints > min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints > min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints > bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints > ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints > uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints > halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints > floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints > doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints > min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints > min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints > min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints > min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints > min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints > bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints > ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints > uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints > halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints > floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints > doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints > min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints > min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints > min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints > min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints > min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools >= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools >= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools >= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools >= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools >= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools >= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools >= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools >= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools >= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools >= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools >= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints >= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints >= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints >= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints >= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints >= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints >= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints >= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints >= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints >= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints >= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints >= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints >= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints >= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints >= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints >= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints >= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints >= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints >= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints >= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints >= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints >= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints >= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs >= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs >= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs >= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs >= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs >= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs >= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs >= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs >= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs >= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs >= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs >= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats >= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats >= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats >= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats >= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats >= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats >= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats >= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats >= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats >= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats >= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats >= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles >= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles >= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles >= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles >= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles >= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles >= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles >= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles >= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles >= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles >= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles >= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats >= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats >= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats >= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats >= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats >= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats >= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats >= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats >= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats >= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats >= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats >= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats >= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats >= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats >= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats >= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats >= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats >= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats >= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats >= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats >= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats >= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats >= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints >= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints >= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints >= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints >= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints >= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints >= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints >= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints >= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints >= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints >= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints >= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints >= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints >= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints >= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints >= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints >= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints >= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints >= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints >= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints >= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints >= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints >= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints >= bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints >= ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints >= uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints >= halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints >= floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints >= doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints >= min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints >= min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints >= min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints >= min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints >= min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools == bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools == ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools == uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools == halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools == floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools == doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools == min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools == min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools == min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools == min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools == min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints == bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints == ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints == uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints == halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints == floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints == doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints == min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints == min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints == min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints == min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints == min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints == bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints == ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints == uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints == halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints == floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints == doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints == min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints == min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints == min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints == min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints == min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs == bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs == ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs == uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs == halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs == floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs == doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs == min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs == min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs == min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs == min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs == min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats == bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats == ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats == uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats == halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats == floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats == doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats == min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats == min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats == min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats == min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats == min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles == bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles == ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles == uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles == halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles == floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles == doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles == min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles == min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles == min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles == min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles == min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats == bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats == ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats == uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats == halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats == floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats == doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats == min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats == min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats == min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats == min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats == min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats == bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats == ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats == uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats == halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats == floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats == doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats == min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats == min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats == min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats == min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats == min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints == bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints == ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints == uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints == halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints == floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints == doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints == min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints == min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints == min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints == min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints == min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints == bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints == ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints == uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints == halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints == floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints == doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints == min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints == min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints == min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints == min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints == min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints == bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints == ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints == uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints == halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints == floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints == doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints == min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints == min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints == min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints == min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints == min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools != bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools != ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools != uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools != halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools != floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools != doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools != min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools != min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools != min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools != min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools != min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints != bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints != ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints != uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints != halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints != floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints != doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints != min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints != min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints != min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints != min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints != min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints != bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints != ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints != uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints != halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints != floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints != doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints != min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints != min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints != min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints != min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints != min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs != bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs != ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs != uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs != halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs != floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs != doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs != min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs != min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs != min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs != min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs != min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats != bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats != ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats != uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats != halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats != floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats != doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats != min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats != min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats != min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats != min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats != min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles != bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles != ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles != uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles != halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles != floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles != doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles != min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles != min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles != min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles != min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles != min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats != bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats != ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats != uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats != halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats != floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats != doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats != min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats != min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats != min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats != min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats != min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats != bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats != ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats != uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats != halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats != floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats != doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats != min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats != min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats != min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats != min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats != min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints != bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints != ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints != uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints != halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints != floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints != doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints != min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints != min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints != min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints != min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints != min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints != bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints != ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints != uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints != halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints != floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints != doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints != min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints != min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints != min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints != min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints != min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints != bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints != ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints != uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints != halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints != floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints != doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints != min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints != min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints != min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints != min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints != min16uints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools << bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools << ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools << uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools << halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools << floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools << doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools << min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools << min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<int, __decltype(bools << min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools << min12ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools << min16uints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints << bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints << ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints << uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints << halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints << floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints << doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints << min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints << min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<int, __decltype(ints << min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints << min12ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints << min16uints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints << bools)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints << ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints << uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints << halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints << floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints << doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints << min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints << min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<uint, __decltype(uints << min16ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints << min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints << min16uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs << bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs << ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs << uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs << halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs << floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs << doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs << min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs << min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs << min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs << min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs << min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats << bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats << ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats << uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats << halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats << floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats << doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats << min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats << min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats << min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats << min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats << min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles << bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles << ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles << uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles << halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles << floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles << doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-57): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-58): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles << min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-57): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-58): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles << min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles << min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles << min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles << min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats << bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats << ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats << uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats << halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats << floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-57): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-58): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats << doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-61): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-62): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats << min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-61): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-62): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats << min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats << min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats << min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats << min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats << bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats << ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats << uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats << halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats << floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-57): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-58): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats << doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-61): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-62): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats << min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-61): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-62): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats << min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats << min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats << min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats << min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints << bools)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints << ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints << uints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints << halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints << floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints << doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints << min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints << min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints << min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints << min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints << min16uints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min12int, __decltype(min12ints << bools)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min12int, __decltype(min12ints << ints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min12int, __decltype(min12ints << uints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints << halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints << floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints << doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints << min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints << min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min12int, __decltype(min12ints << min16ints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min12int, __decltype(min12ints << min12ints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min12int, __decltype(min12ints << min16uints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints << bools)>::value, "");     /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints << ints)>::value, "");      /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints << uints)>::value, "");     /* expected-warning {{min16uint is promoted to uint}} */
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints << halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints << floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints << doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints << min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints << min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints << min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints << min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints << min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<int, __decltype(bools >> bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools >> ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools >> uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools >> halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools >> floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools >> doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools >> min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools >> min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<int, __decltype(bools >> min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools >> min12ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools >> min16uints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints >> bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints >> ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints >> uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints >> halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints >> floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints >> doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints >> min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints >> min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<int, __decltype(ints >> min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints >> min12ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints >> min16uints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints >> bools)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints >> ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints >> uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints >> halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints >> floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints >> doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints >> min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints >> min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<uint, __decltype(uints >> min16ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints >> min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints >> min16uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs >> bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs >> ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs >> uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs >> halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs >> floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs >> doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs >> min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs >> min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs >> min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs >> min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs >> min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats >> bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats >> ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats >> uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats >> halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats >> floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats >> doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats >> min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats >> min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats >> min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats >> min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats >> min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles >> bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles >> ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles >> uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles >> halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles >> floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles >> doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-57): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-58): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles >> min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-57): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-58): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles >> min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles >> min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles >> min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles >> min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats >> bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats >> ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats >> uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats >> halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats >> floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-57): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-58): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats >> doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-61): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-62): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats >> min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-61): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-62): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats >> min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats >> min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats >> min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats >> min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats >> bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats >> ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats >> uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats >> halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats >> floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-57): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-58): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats >> doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-61): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-62): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats >> min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-61): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-62): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats >> min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats >> min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats >> min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats >> min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints >> bools)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints >> ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints >> uints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints >> halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints >> floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints >> doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints >> min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints >> min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints >> min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints >> min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints >> min16uints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min12int, __decltype(min12ints >> bools)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min12int, __decltype(min12ints >> ints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min12int, __decltype(min12ints >> uints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints >> halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints >> floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints >> doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints >> min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints >> min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min12int, __decltype(min12ints >> min16ints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min12int, __decltype(min12ints >> min12ints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min12int, __decltype(min12ints >> min16uints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints >> bools)>::value, "");     /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints >> ints)>::value, "");      /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints >> uints)>::value, "");     /* expected-warning {{min16uint is promoted to uint}} */
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints >> halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints >> floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints >> doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints >> min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints >> min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints >> min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints >> min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints >> min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<int, __decltype(bools & bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools & ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools & uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools & halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools & floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools & doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools & min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools & min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<int, __decltype(bools & min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools & min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools & min16uints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints & bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints & ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints & uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-47): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-48): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints & halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints & floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints & doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints & min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints & min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<int, __decltype(ints & min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints & min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints & min16uints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints & bools)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints & ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints & uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints & halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints & floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints & doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints & min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints & min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<uint, __decltype(uints & min16ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints & min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints & min16uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs & bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-47): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-48): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs & ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs & uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs & halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs & floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs & doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs & min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs & min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs & min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs & min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs & min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats & bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats & ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats & uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats & halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats & floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats & doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats & min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats & min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats & min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats & min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats & min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles & bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles & ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles & uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles & halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles & floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles & doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles & min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles & min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles & min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles & min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles & min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats & bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats & ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats & uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats & halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats & floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats & doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats & min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats & min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats & min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats & min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats & min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats & bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats & ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats & uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats & halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats & floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats & doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats & min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats & min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats & min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats & min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats & min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints & bools)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<int, __decltype(min16ints & ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16ints & uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints & halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints & floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints & doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints & min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints & min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints & min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints & min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16ints & min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min12int, __decltype(min12ints & bools)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<int, __decltype(min12ints & ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min12ints & uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints & halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints & floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints & doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints & min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints & min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min12ints & min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min12int, __decltype(min12ints & min12ints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min16uint, __decltype(min12ints & min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints & bools)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<uint, __decltype(min16uints & ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16uints & uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints & halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints & floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints & doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints & min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints & min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints & min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints & min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints & min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<int, __decltype(bools | bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools | ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools | uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools | halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools | floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools | doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools | min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools | min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<int, __decltype(bools | min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools | min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools | min16uints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints | bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints | ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints | uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-47): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-48): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints | halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints | floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints | doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints | min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints | min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<int, __decltype(ints | min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints | min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints | min16uints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints | bools)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints | ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints | uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints | halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints | floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints | doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints | min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints | min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<uint, __decltype(uints | min16ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints | min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints | min16uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs | bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-47): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-48): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs | ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs | uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs | halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs | floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs | doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs | min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs | min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs | min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs | min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs | min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats | bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats | ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats | uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats | halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats | floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats | doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats | min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats | min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats | min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats | min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats | min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles | bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles | ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles | uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles | halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles | floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles | doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles | min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles | min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles | min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles | min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles | min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats | bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats | ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats | uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats | halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats | floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats | doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats | min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats | min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats | min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats | min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats | min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats | bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats | ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats | uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats | halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats | floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats | doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats | min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats | min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats | min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats | min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats | min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints | bools)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<int, __decltype(min16ints | ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16ints | uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints | halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints | floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints | doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints | min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints | min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints | min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints | min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16ints | min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min12int, __decltype(min12ints | bools)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<int, __decltype(min12ints | ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min12ints | uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints | halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints | floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints | doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints | min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints | min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min12ints | min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min12int, __decltype(min12ints | min12ints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min16uint, __decltype(min12ints | min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints | bools)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<uint, __decltype(min16uints | ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16uints | uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints | halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints | floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints | doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints | min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints | min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints | min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints | min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints | min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<int, __decltype(bools ^ bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools ^ ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools ^ uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools ^ halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools ^ floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools ^ doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools ^ min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  bools = (bools ^ min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<int, __decltype(bools ^ min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(bools ^ min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(bools ^ min16uints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints ^ bools)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints ^ ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints ^ uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-47): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-48): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints ^ halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints ^ floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints ^ doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints ^ min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  ints = (ints ^ min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<int, __decltype(ints ^ min16ints)>::value, "");
-  _Static_assert(std::is_same<int, __decltype(ints ^ min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(ints ^ min16uints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints ^ bools)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints ^ ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints ^ uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints ^ halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints ^ floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints ^ doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints ^ min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  uints = (uints ^ min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<uint, __decltype(uints ^ min16ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints ^ min12ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(uints ^ min16uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs ^ bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-47): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-48): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs ^ ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs ^ uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs ^ halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs ^ floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs ^ doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs ^ min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs ^ min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs ^ min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs ^ min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  halfs = (halfs ^ min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats ^ bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-48): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-49): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats ^ ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats ^ uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats ^ halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats ^ floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats ^ doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats ^ min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats ^ min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats ^ min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats ^ min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  floats = (floats ^ min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles ^ bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-49): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-50): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles ^ ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles ^ uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-50): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-51): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles ^ halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-51): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-52): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles ^ floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles ^ doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles ^ min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles ^ min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles ^ min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles ^ min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  doubles = (doubles ^ min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats ^ bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats ^ ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats ^ uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats ^ halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats ^ floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats ^ doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats ^ min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats ^ min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats ^ min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats ^ min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16floats = (min16floats ^ min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats ^ bools); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats ^ ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats ^ uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats ^ halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats ^ floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-56): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-57): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats ^ doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats ^ min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-60): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-61): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats ^ min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats ^ min16ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats ^ min12ints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min10floats = (min10floats ^ min16uints); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints ^ bools)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<int, __decltype(min16ints ^ ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16ints ^ uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints ^ halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints ^ floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints ^ doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints ^ min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16ints = (min16ints ^ min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min16ints ^ min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16int, __decltype(min16ints ^ min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16ints ^ min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min12int, __decltype(min12ints ^ bools)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<int, __decltype(min12ints ^ ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min12ints ^ uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-52): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-53): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints ^ halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints ^ floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints ^ doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints ^ min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-58): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-59): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min12ints = (min12ints ^ min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16int, __decltype(min12ints ^ min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int}} */
-  _Static_assert(std::is_same<min12int, __decltype(min12ints ^ min12ints)>::value, "");  // expected-warning {{min12int is promoted to min16int}}
-  _Static_assert(std::is_same<min16uint, __decltype(min12ints ^ min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints ^ bools)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<uint, __decltype(min16uints ^ ints)>::value, "");
-  _Static_assert(std::is_same<uint, __decltype(min16uints ^ uints)>::value, "");
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-53): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-54): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints ^ halfs); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-54): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-55): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints ^ floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-55): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-56): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints ^ doubles); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints ^ min16floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  // X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,22-59): error X3082: int or unsigned int type required;X:\temp\Sfbl_grfx_dev_p\x86\chk\operators.js.hlsl(16,12-60): error X3013: 'get_value': no matching 1 parameter function;compilation failed; no code produced
-  min16uints = (min16uints ^ min10floats); // expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}}
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints ^ min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints ^ min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<min16uint, __decltype(min16uints ^ min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint}} */
-  _Static_assert(std::is_same<bool, __decltype(bools && bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools && ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools && uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools && halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools && floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools && doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools && min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools && min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools && min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools && min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools && min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints && bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints && ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints && uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints && halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints && floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints && doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints && min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints && min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints && min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints && min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints && min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints && bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints && ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints && uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints && halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints && floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints && doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints && min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints && min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints && min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints && min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints && min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs && bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs && ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs && uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs && halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs && floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs && doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs && min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs && min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs && min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs && min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs && min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats && bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats && ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats && uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats && halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats && floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats && doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats && min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats && min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats && min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats && min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats && min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles && bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles && ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles && uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles && halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles && floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles && doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles && min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles && min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles && min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles && min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles && min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats && bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats && ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats && uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats && halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats && floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats && doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats && min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats && min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats && min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats && min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats && min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats && bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats && ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats && uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats && halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats && floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats && doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats && min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats && min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats && min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats && min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats && min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints && bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints && ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints && uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints && halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints && floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints && doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints && min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints && min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints && min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints && min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints && min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints && bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints && ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints && uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints && halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints && floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints && doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints && min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints && min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints && min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints && min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints && min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints && bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints && ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints && uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints && halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints && floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints && doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints && min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints && min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints && min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints && min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints && min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools || bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools || ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools || uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools || halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools || floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools || doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools || min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools || min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools || min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools || min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(bools || min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints || bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints || ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints || uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints || halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints || floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints || doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints || min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints || min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints || min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints || min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(ints || min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints || bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints || ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints || uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints || halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints || floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints || doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints || min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints || min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints || min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints || min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(uints || min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs || bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs || ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs || uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs || halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs || floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs || doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs || min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs || min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs || min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs || min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(halfs || min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats || bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats || ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats || uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats || halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats || floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats || doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats || min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats || min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats || min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats || min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(floats || min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles || bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles || ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles || uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles || halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles || floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles || doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles || min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles || min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles || min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles || min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(doubles || min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats || bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats || ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats || uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats || halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats || floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats || doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats || min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats || min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats || min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats || min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16floats || min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats || bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats || ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats || uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats || halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats || floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats || doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats || min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats || min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats || min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats || min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min10floats || min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints || bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints || ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints || uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints || halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints || floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints || doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints || min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints || min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints || min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints || min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16ints || min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints || bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints || ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints || uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints || halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints || floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints || doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints || min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints || min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints || min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints || min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min12ints || min16uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints || bools)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints || ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints || uints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints || halfs)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints || floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints || doubles)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints || min16floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints || min10floats)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints || min16ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints || min12ints)>::value, "");
-  _Static_assert(std::is_same<bool, __decltype(min16uints || min16uints)>::value, "");
+  def GetArithOpResultType(operand1, operand2):
+      type1, size1, is_float1, unsigned1 = operand1
+      type2, size2, is_float2, unsigned2 = operand2
+      rtn_type = type1
+      # return float if one of operand is float
+      if is_float1 != is_float2:
+          rtn_type = type1 if is_float1 else type2
+      else:
+          rtn_type = type1 if size1 > size2 else type2
+      # bool operations return int
+      rtn_type = "int" if rtn_type == "bool" else rtn_type
+      # if one of the operand is unsigned, make unsigned
+      if unsigned1 or unsigned2:
+          if rtn_type == "int":
+              rtn_type = "uint"
+          elif rtn_type == "min16int":
+              rtn_type = "min16uint"
+          elif rtn_type == "int16_t":
+              rtn_type = "uint16_t"
+          elif rtn_type == "int32_t":
+              rtn_type = "uint32_t"
+          elif rtn_type == "int64_t":
+              rtn_type = "uint64_t"
+      return rtn_type
 
+  def GetOrderOpResultType(operand1, operand2):
+      return "bool"
+
+  def GetLogicalOpResultType(operand1, operand2):
+      return "bool"
+
+  def GetShiftOpResultType(operand1, operand2):
+      return "int" if operand1[0] == "bool" else operand1[0]
+
+  def GetBitwiseOpResultType(operand1, operand2):
+      # ignore bitwise for floats
+      if operand1[2] or operand2[2]:
+          return operand1[0]
+      # otherwise return same type as arithmetic op
+      return GetArithOpResultType(operand1, operand2)
+
+  def GetOpResultType(operator, operand1, operand2):
+      return GetArithOpResultType(operand1, operand2) if operator in ArithOperators else \
+            GetOrderOpResultType(operand1, operand2) if operator in OrderOperators else \
+            GetLogicalOpResultType(operand1, operand2)
+
+  def GenerateBitWiseStatement(operator, operand1, operand2):
+      result_type = GetBitwiseOpResultType(operand1, operand2) if operator in BitWiseOperators else \
+                    GetShiftOpResultType(operand1, operand2)
+      # is_float
+      if operand1[2] or operand2[2]:
+          return "{0}s = ({1}s {2} {3}s);".format(result_type, operand1[0], operator, operand2[0])
+      return "_Static_assert(std::is_same<{0}, __decltype({1}s {2} {3}s)>::value, \"\");".format(result_type, operand1[0], operator, operand2[0])
+
+  def GenerateBinaryOperators():
+      result = []
+      for operator in ArithOperators + OrderOperators + LogicalOperators:
+          for operand1 in primitiveTypes:
+              for operand2 in primitiveTypes:
+                  result += ["_Static_assert(std::is_same<{0}, __decltype({1}s {2} {3}s)>::value, \"\");".format(GetOpResultType(operator, operand1, operand2),operand1[0], operator, operand2[0])]
+      for operator in ShiftOperators + BitWiseOperators:
+          for operand1 in primitiveTypes:
+              for operand2 in primitiveTypes:
+                  result += [GenerateBitWiseStatement(operator, operand1, operand2)]
+      return result
+
+</py>*/
+// <py::lines('GENERATED_BINARY_ARITH')>GenerateBinaryOperators()</py>
+// GENERATED_BINARY_ARITH:BEGIN
+_Static_assert(std::is_same<int, __decltype(bools + bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools + ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(bools + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(bools + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(bools + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(bools + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(bools + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(bools + min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools + min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools + min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools + int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(bools + int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(bools + int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools + uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(bools + uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(bools + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(bools + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(bools + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(bools + float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints + bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints + ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(ints + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(ints + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(ints + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(ints + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(ints + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(ints + min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints + min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints + min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints + int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(ints + int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(ints + int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints + uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(ints + uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(ints + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(ints + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(ints + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(ints + float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints + bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints + ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uints + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uints + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uints + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(uints + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uints + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uints + min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints + min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints + min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints + int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints + int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints + int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints + uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints + uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uints + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uints + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uints + float64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + bools)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(halfs + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(halfs + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(halfs + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(halfs + min10floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + min16ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + min12ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + min16uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + int16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + int32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + int64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + uint16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + uint32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(halfs + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(halfs + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(halfs + float64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + bools)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(floats + doubles)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + min16floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + min10floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + min16ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + min12ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + min16uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + int16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + int32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + int64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + uint16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + uint32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(floats + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(floats + float64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + bools)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + halfs)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + doubles)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + min16floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + min10floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + min16ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + min12ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + min16uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + int16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + int32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + int64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + uint16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + uint32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + uint64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + float16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(doubles + float64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats + bools)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats + ints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats + uints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(min16floats + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min16floats + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min16floats + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats + min10floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats + min16ints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats + min12ints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats + min16uints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats + int16_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats + int32_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats + int64_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats + uint16_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats + uint32_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats + uint64_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(min16floats + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min16floats + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min16floats + float64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats + bools)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats + ints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats + uints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(min10floats + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min10floats + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min10floats + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min10floats + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats + min16ints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats + min12ints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats + min16uints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats + int16_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats + int32_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats + int64_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats + uint16_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats + uint32_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats + uint64_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(min10floats + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min10floats + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min10floats + float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(min16ints + bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min16ints + ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16ints + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(min16ints + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min16ints + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min16ints + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16ints + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min16ints + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints + min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints + min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16ints + min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min16ints + int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min16ints + int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min16ints + int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16ints + uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16ints + uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16ints + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(min16ints + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min16ints + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min16ints + float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(min12ints + bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min12ints + ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min12ints + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(min12ints + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min12ints + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min12ints + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min12ints + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min12ints + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min12ints + min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints + min12ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min12ints + min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min12ints + int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min12ints + int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min12ints + int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min12ints + uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min12ints + uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min12ints + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(min12ints + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min12ints + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min12ints + float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16uints + bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(min16uints + ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16uints + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(min16uints + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min16uints + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min16uints + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16uints + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min16uints + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints + min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints + min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints + min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints + int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints + int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints + int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints + uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints + uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(min16uints + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min16uints + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min16uints + float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int16_ts + bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(int16_ts + ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int16_ts + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(int16_ts + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(int16_ts + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(int16_ts + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(int16_ts + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(int16_ts + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(int16_ts + min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts + min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(int16_ts + min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts + int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int16_ts + int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int16_ts + int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(int16_ts + uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int16_ts + uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int16_ts + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(int16_ts + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(int16_ts + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(int16_ts + float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int32_ts + bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int32_ts + ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int32_ts + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(int32_ts + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(int32_ts + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(int32_ts + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(int32_ts + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(int32_ts + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts + min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts + min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts + min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts + int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts + int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int32_ts + int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts + uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts + uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int32_ts + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(int32_ts + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(int32_ts + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(int32_ts + float64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts + bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts + ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(int64_ts + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(int64_ts + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(int64_ts + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(int64_ts + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(int64_ts + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts + min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts + min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts + min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts + int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts + int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts + int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts + uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts + uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(int64_ts + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(int64_ts + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(int64_ts + float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint16_ts + bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uint16_ts + ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint16_ts + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uint16_ts + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uint16_ts + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uint16_ts + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(uint16_ts + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uint16_ts + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts + min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts + min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts + min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts + int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts + int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts + int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts + uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts + uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uint16_ts + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uint16_ts + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uint16_ts + float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts + bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts + ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uint32_ts + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uint32_ts + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uint32_ts + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(uint32_ts + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uint32_ts + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts + min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts + min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts + min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts + int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts + int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts + int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts + uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts + uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uint32_ts + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uint32_ts + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uint32_ts + float64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts + bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts + ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uint64_ts + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uint64_ts + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uint64_ts + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(uint64_ts + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uint64_ts + min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts + min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts + min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts + min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts + int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts + int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts + int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts + uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts + uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uint64_ts + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uint64_ts + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uint64_ts + float64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + bools)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(float16_ts + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(float16_ts + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(float16_ts + doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(float16_ts + min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + min10floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + min16ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + min12ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + min16uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + int16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + int32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + int64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + uint16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + uint32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float16_ts + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float16_ts + float64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + bools)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(float32_ts + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(float32_ts + doubles)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + min16floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + min10floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + min16ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + min12ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + min16uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + int16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + int32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + int64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + uint16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + uint32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float32_ts + float64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + bools)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + halfs)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(float64_ts + doubles)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + min16floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + min10floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + min16ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + min12ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + min16uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + int16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + int32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + int64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + uint16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + uint32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + uint64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + float16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts + float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools - bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools - ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(bools - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(bools - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(bools - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(bools - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(bools - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(bools - min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools - min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools - min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools - int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(bools - int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(bools - int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools - uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(bools - uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(bools - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(bools - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(bools - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(bools - float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints - bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints - ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(ints - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(ints - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(ints - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(ints - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(ints - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(ints - min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints - min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints - min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints - int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(ints - int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(ints - int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints - uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(ints - uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(ints - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(ints - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(ints - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(ints - float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints - bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints - ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uints - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uints - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uints - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(uints - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uints - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uints - min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints - min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints - min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints - int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints - int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints - int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints - uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints - uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uints - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uints - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uints - float64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - bools)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(halfs - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(halfs - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(halfs - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(halfs - min10floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - min16ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - min12ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - min16uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - int16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - int32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - int64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - uint16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - uint32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(halfs - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(halfs - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(halfs - float64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - bools)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(floats - doubles)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - min16floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - min10floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - min16ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - min12ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - min16uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - int16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - int32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - int64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - uint16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - uint32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(floats - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(floats - float64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - bools)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - halfs)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - doubles)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - min16floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - min10floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - min16ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - min12ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - min16uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - int16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - int32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - int64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - uint16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - uint32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - uint64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - float16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(doubles - float64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats - bools)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats - ints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats - uints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(min16floats - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min16floats - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min16floats - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats - min10floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats - min16ints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats - min12ints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats - min16uints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats - int16_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats - int32_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats - int64_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats - uint16_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats - uint32_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats - uint64_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(min16floats - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min16floats - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min16floats - float64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats - bools)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats - ints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats - uints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(min10floats - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min10floats - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min10floats - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min10floats - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats - min16ints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats - min12ints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats - min16uints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats - int16_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats - int32_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats - int64_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats - uint16_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats - uint32_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats - uint64_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(min10floats - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min10floats - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min10floats - float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(min16ints - bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min16ints - ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16ints - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(min16ints - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min16ints - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min16ints - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16ints - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min16ints - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints - min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints - min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16ints - min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min16ints - int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min16ints - int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min16ints - int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16ints - uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16ints - uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16ints - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(min16ints - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min16ints - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min16ints - float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(min12ints - bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min12ints - ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min12ints - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(min12ints - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min12ints - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min12ints - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min12ints - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min12ints - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min12ints - min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints - min12ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min12ints - min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min12ints - int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min12ints - int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min12ints - int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min12ints - uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min12ints - uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min12ints - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(min12ints - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min12ints - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min12ints - float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16uints - bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(min16uints - ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16uints - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(min16uints - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min16uints - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min16uints - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16uints - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min16uints - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints - min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints - min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints - min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints - int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints - int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints - int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints - uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints - uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(min16uints - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min16uints - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min16uints - float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int16_ts - bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(int16_ts - ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int16_ts - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(int16_ts - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(int16_ts - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(int16_ts - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(int16_ts - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(int16_ts - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(int16_ts - min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts - min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(int16_ts - min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts - int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int16_ts - int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int16_ts - int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(int16_ts - uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int16_ts - uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int16_ts - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(int16_ts - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(int16_ts - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(int16_ts - float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int32_ts - bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int32_ts - ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int32_ts - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(int32_ts - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(int32_ts - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(int32_ts - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(int32_ts - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(int32_ts - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts - min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts - min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts - min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts - int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts - int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int32_ts - int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts - uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts - uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int32_ts - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(int32_ts - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(int32_ts - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(int32_ts - float64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts - bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts - ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(int64_ts - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(int64_ts - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(int64_ts - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(int64_ts - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(int64_ts - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts - min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts - min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts - min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts - int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts - int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts - int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts - uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts - uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(int64_ts - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(int64_ts - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(int64_ts - float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint16_ts - bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uint16_ts - ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint16_ts - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uint16_ts - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uint16_ts - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uint16_ts - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(uint16_ts - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uint16_ts - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts - min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts - min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts - min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts - int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts - int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts - int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts - uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts - uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uint16_ts - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uint16_ts - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uint16_ts - float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts - bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts - ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uint32_ts - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uint32_ts - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uint32_ts - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(uint32_ts - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uint32_ts - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts - min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts - min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts - min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts - int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts - int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts - int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts - uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts - uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uint32_ts - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uint32_ts - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uint32_ts - float64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts - bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts - ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uint64_ts - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uint64_ts - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uint64_ts - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(uint64_ts - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uint64_ts - min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts - min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts - min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts - min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts - int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts - int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts - int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts - uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts - uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uint64_ts - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uint64_ts - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uint64_ts - float64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - bools)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(float16_ts - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(float16_ts - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(float16_ts - doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(float16_ts - min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - min10floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - min16ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - min12ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - min16uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - int16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - int32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - int64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - uint16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - uint32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float16_ts - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float16_ts - float64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - bools)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(float32_ts - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(float32_ts - doubles)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - min16floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - min10floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - min16ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - min12ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - min16uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - int16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - int32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - int64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - uint16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - uint32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float32_ts - float64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - bools)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - halfs)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(float64_ts - doubles)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - min16floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - min10floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - min16ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - min12ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - min16uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - int16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - int32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - int64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - uint16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - uint32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - uint64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - float16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts - float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools / bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools / ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(bools / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(bools / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(bools / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(bools / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(bools / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(bools / min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools / min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools / min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools / int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(bools / int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(bools / int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools / uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(bools / uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(bools / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(bools / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(bools / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(bools / float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints / bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints / ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(ints / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(ints / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(ints / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(ints / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(ints / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(ints / min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints / min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints / min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints / int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(ints / int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(ints / int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints / uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(ints / uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(ints / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(ints / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(ints / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(ints / float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints / bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints / ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uints / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uints / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uints / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(uints / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uints / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uints / min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints / min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints / min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints / int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints / int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints / int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints / uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints / uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uints / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uints / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uints / float64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / bools)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(halfs / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(halfs / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(halfs / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(halfs / min10floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / min16ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / min12ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / min16uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / int16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / int32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / int64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / uint16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / uint32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(halfs / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(halfs / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(halfs / float64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / bools)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(floats / doubles)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / min16floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / min10floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / min16ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / min12ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / min16uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / int16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / int32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / int64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / uint16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / uint32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(floats / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(floats / float64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / bools)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / halfs)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / doubles)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / min16floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / min10floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / min16ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / min12ints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / min16uints)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / int16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / int32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / int64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / uint16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / uint32_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / uint64_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / float16_ts)>::value, "");
+_Static_assert(std::is_same<double, __decltype(doubles / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(doubles / float64_ts)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats / bools)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats / ints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats / uints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(min16floats / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min16floats / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min16floats / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16floats / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats / min10floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats / min16ints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats / min12ints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats / min16uints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats / int16_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats / int32_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats / int64_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats / uint16_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats / uint32_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats / uint64_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(min16floats / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min16floats / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min16floats / float64_ts)>::value, "");
+_Static_assert(std::is_same<min10float, __decltype(min10floats / bools)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats / ints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats / uints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(min10floats / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min10floats / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min10floats / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min10floats / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats / min16ints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats / min12ints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats / min16uints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats / int16_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats / int32_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats / int64_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats / uint16_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats / uint32_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats / uint64_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(min10floats / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min10floats / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min10floats / float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(min16ints / bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min16ints / ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16ints / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(min16ints / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min16ints / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min16ints / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16ints / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min16ints / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints / min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints / min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16ints / min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min16ints / int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min16ints / int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min16ints / int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16ints / uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16ints / uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16ints / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(min16ints / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min16ints / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min16ints / float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(min12ints / bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min12ints / ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min12ints / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(min12ints / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min12ints / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min12ints / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min12ints / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min12ints / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min12ints / min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints / min12ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min12ints / min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min12ints / int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min12ints / int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min12ints / int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min12ints / uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min12ints / uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min12ints / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(min12ints / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min12ints / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min12ints / float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16uints / bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(min16uints / ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16uints / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(min16uints / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min16uints / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min16uints / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(min16uints / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min16uints / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints / min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints / min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints / min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints / int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints / int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints / int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints / uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints / uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(min16uints / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min16uints / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min16uints / float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int16_ts / bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(int16_ts / ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int16_ts / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(int16_ts / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(int16_ts / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(int16_ts / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(int16_ts / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(int16_ts / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(int16_ts / min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts / min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(int16_ts / min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts / int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int16_ts / int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int16_ts / int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(int16_ts / uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int16_ts / uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int16_ts / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(int16_ts / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(int16_ts / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(int16_ts / float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int32_ts / bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int32_ts / ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int32_ts / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(int32_ts / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(int32_ts / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(int32_ts / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(int32_ts / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(int32_ts / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts / min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts / min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts / min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts / int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts / int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int32_ts / int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts / uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts / uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int32_ts / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(int32_ts / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(int32_ts / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(int32_ts / float64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts / bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts / ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(int64_ts / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(int64_ts / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(int64_ts / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(int64_ts / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(int64_ts / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts / min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts / min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts / min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts / int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts / int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts / int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts / uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts / uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(int64_ts / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(int64_ts / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(int64_ts / float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint16_ts / bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uint16_ts / ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint16_ts / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uint16_ts / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uint16_ts / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uint16_ts / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(uint16_ts / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uint16_ts / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts / min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts / min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts / min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts / int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts / int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts / int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts / uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts / uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uint16_ts / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uint16_ts / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uint16_ts / float64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts / bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts / ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uint32_ts / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uint32_ts / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uint32_ts / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(uint32_ts / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uint32_ts / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts / min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts / min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts / min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts / int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts / int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts / int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts / uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts / uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uint32_ts / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uint32_ts / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uint32_ts / float64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts / bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts / ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uint64_ts / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uint64_ts / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uint64_ts / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(uint64_ts / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uint64_ts / min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts / min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts / min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts / min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts / int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts / int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts / int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts / uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts / uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uint64_ts / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uint64_ts / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uint64_ts / float64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / bools)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(float16_ts / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(float16_ts / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(float16_ts / doubles)>::value, "");
+_Static_assert(std::is_same<min16float, __decltype(float16_ts / min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / min10floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / min16ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / min12ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / min16uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / int16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / int32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / int64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / uint16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / uint32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float16_ts / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float16_ts / float64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / bools)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(float32_ts / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(float32_ts / doubles)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / min16floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / min10floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / min16ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / min12ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / min16uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / int16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / int32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / int64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / uint16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / uint32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float32_ts / float64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / bools)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / halfs)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(float64_ts / doubles)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / min16floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / min10floats)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / min16ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / min12ints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / min16uints)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / int16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / int32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / int64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / uint16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / uint32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / uint64_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / float16_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts / float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools % bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools % ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(bools % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(bools % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(bools % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(bools % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(bools % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(bools % min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools % min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools % min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools % int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(bools % int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(bools % int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools % uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(bools % uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(bools % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(bools % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(bools % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(bools % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(ints % bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints % ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(ints % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(ints % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(ints % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(ints % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(ints % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(ints % min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints % min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints % min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints % int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(ints % int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(ints % int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints % uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(ints % uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(ints % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(ints % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(ints % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(ints % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uints % bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints % ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uints % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uints % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uints % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(uints % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uints % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uints % min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints % min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints % min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints % int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints % int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints % int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints % uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints % uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uints % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uints % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uints % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(halfs % bools)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs % ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(halfs % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(halfs % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(halfs % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(halfs % min10floats)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs % min16ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs % min12ints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs % min16uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs % int16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs % int32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs % int64_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs % uint16_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs % uint32_ts)>::value, "");
+_Static_assert(std::is_same<half, __decltype(halfs % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(halfs % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(halfs % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(halfs % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float, __decltype(floats % bools)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(floats % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float, __decltype(floats % min16floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % min10floats)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % min16ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % min12ints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % min16uints)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % int16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % int32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % int64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % uint16_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % uint32_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float, __decltype(floats % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(floats % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(floats % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % bools)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % ints)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % uints)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % halfs)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % floats)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % min16floats)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % min10floats)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % min16ints)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % min12ints)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % min16uints)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % int16_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % int32_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % int64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % uint16_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % uint32_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % uint64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % float16_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(doubles % float32_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(doubles % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % bools)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % ints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % uints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(min16floats % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min16floats % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min16floats % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % min10floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % min16ints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % min12ints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % min16uints)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % int16_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % int32_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % int64_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % uint16_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % uint32_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16floats % uint64_ts)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(min16floats % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min16floats % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min16floats % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % bools)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % ints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % uints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<half, __decltype(min10floats % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min10floats % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min10floats % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min10floats % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % min16ints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % min12ints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % min16uints)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % int16_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % int32_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % int64_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % uint16_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % uint32_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min10floats % uint64_ts)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(min10floats % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min10floats % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min10floats % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min16ints % bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min16ints % ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16ints % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(min16ints % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min16ints % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min16ints % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16ints % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min16ints % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints % min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints % min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16ints % min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min16ints % int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min16ints % int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min16ints % int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16ints % uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16ints % uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16ints % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(min16ints % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min16ints % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min16ints % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min12ints % bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min12ints % ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min12ints % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(min12ints % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min12ints % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min12ints % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min12ints % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min12ints % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min12ints % min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints % min12ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min12ints % min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min12ints % int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min12ints % int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min12ints % int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min12ints % uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min12ints % uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min12ints % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(min12ints % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min12ints % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min12ints % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(min16uints % bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(min16uints % ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16uints % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(min16uints % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(min16uints % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(min16uints % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(min16uints % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(min16uints % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints % min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints % min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints % min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints % int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints % int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints % int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints % uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints % uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(min16uints % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(min16uints % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(min16uints % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(int16_ts % bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(int16_ts % ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int16_ts % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(int16_ts % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(int16_ts % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(int16_ts % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(int16_ts % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(int16_ts % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(int16_ts % min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts % min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(int16_ts % min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts % int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int16_ts % int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int16_ts % int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(int16_ts % uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int16_ts % uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int16_ts % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(int16_ts % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(int16_ts % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(int16_ts % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(int32_ts % bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int32_ts % ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int32_ts % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(int32_ts % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(int32_ts % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(int32_ts % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(int32_ts % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(int32_ts % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts % min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts % min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts % min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts % int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts % int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int32_ts % int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts % uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts % uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int32_ts % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(int32_ts % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(int32_ts % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(int32_ts % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts % bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts % ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(int64_ts % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(int64_ts % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(int64_ts % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(int64_ts % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(int64_ts % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts % min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts % min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts % min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts % int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts % int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts % int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts % uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts % uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(int64_ts % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(int64_ts % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(int64_ts % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uint16_ts % bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uint16_ts % ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint16_ts % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uint16_ts % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uint16_ts % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uint16_ts % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(uint16_ts % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uint16_ts % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts % min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts % min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts % min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts % int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts % int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts % int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts % uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts % uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uint16_ts % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uint16_ts % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uint16_ts % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uint32_ts % bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts % ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uint32_ts % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uint32_ts % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uint32_ts % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(uint32_ts % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uint32_ts % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts % min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts % min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts % min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts % int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts % int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts % int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts % uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts % uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uint32_ts % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uint32_ts % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uint32_ts % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts % bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts % ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(uint64_ts % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(uint64_ts % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(uint64_ts % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(uint64_ts % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min10float, __decltype(uint64_ts % min10floats)>::value, "");    /* expected-warning {{min10float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts % min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts % min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts % min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts % int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts % int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts % int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts % uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts % uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(uint64_ts % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(uint64_ts % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(uint64_ts % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % bools)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % uints)>::value, "");
+_Static_assert(std::is_same<half, __decltype(float16_ts % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(float16_ts % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(float16_ts % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16float, __decltype(float16_ts % min16floats)>::value, "");    /* expected-warning {{min16float is promoted to float16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % min10floats)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % min16ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % min12ints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % min16uints)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % int16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % int32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % int64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % uint16_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % uint32_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float16_t, __decltype(float16_ts % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float16_ts % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float16_ts % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % bools)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % halfs)>::value, "");
+_Static_assert(std::is_same<float, __decltype(float32_ts % floats)>::value, "");
+_Static_assert(std::is_same<double, __decltype(float32_ts % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % min16floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % min10floats)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % min16ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % min12ints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % min16uints)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % int16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % int32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % int64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % uint16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % uint32_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % uint64_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % float16_ts)>::value, "");
+_Static_assert(std::is_same<float32_t, __decltype(float32_ts % float32_ts)>::value, "");
+_Static_assert(std::is_same<float64_t, __decltype(float32_ts % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % bools)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % ints)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % uints)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % halfs)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % floats)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<double, __decltype(float64_ts % doubles)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % min16floats)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % min10floats)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % min16ints)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % min12ints)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % min16uints)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % int16_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % int32_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % int64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % uint16_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % uint32_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % uint64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % float16_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % float32_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<float64_t, __decltype(float64_ts % float64_ts)>::value, "");    /* expected-error {{modulo cannot be used with doubles, cast to float first}} fxc-pass {{}} */
+_Static_assert(std::is_same<bool, __decltype(bools < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts < float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts <= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts > float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts >= float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts && float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(bools || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(ints || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uints || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(halfs || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(floats || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(doubles || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16floats || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min10floats || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16ints || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min12ints || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(min16uints || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int16_ts || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int32_ts || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(int64_ts || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint16_ts || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint32_ts || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(uint64_ts || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float16_ts || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float32_ts || float64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || bools)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || halfs)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || doubles)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || min16floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || min10floats)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || min16ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || min12ints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || min16uints)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || int16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || int32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || int64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || uint16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || uint32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || uint64_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || float16_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || float32_ts)>::value, "");
+_Static_assert(std::is_same<bool, __decltype(float64_ts || float64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools << bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools << ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools << uints)>::value, "");
+ints = (bools << halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (bools << floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (bools << doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (bools << min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (bools << min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(bools << min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools << min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools << min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools << int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools << int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools << int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools << uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools << uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools << uint64_ts)>::value, "");
+ints = (bools << float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+ints = (bools << float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+ints = (bools << float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints << bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints << ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints << uints)>::value, "");
+ints = (ints << halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints << floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints << doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints << min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints << min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(ints << min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints << min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints << min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints << int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints << int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints << int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints << uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints << uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints << uint64_ts)>::value, "");
+ints = (ints << float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+ints = (ints << float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+ints = (ints << float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uints << bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints << ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints << uints)>::value, "");
+uints = (uints << halfs);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints << floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints << doubles);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints << min16floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints << min10floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<uint, __decltype(uints << min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints << min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints << min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints << int16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints << int32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints << int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints << uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints << uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints << uint64_ts)>::value, "");
+uints = (uints << float16_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+uints = (uints << float32_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+uints = (uints << float64_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+halfs = (halfs << bools);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs << ints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs << uints);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs << halfs);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs << floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs << doubles);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs << min16floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs << min10floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs << min16ints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs << min12ints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs << min16uints);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs << int16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+halfs = (halfs << int32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+halfs = (halfs << int64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+halfs = (halfs << uint16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+halfs = (halfs << uint32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+halfs = (halfs << uint64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+halfs = (halfs << float16_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+halfs = (halfs << float32_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+halfs = (halfs << float64_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+floats = (floats << bools);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats << ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats << uints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats << halfs);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats << floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats << doubles);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats << min16floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats << min10floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats << min16ints);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats << min12ints);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats << min16uints); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats << int16_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+floats = (floats << int32_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+floats = (floats << int64_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+floats = (floats << uint16_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+floats = (floats << uint32_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+floats = (floats << uint64_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+floats = (floats << float16_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+floats = (floats << float32_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+floats = (floats << float64_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+doubles = (doubles << bools);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles << ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles << uints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles << halfs);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles << floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles << doubles);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles << min16floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles << min10floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles << min16ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles << min12ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles << min16uints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles << int16_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+doubles = (doubles << int32_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+doubles = (doubles << int64_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+doubles = (doubles << uint16_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+doubles = (doubles << uint32_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+doubles = (doubles << uint64_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+doubles = (doubles << float16_ts);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+doubles = (doubles << float32_ts);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+doubles = (doubles << float64_ts);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+min16floats = (min16floats << bools);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats << ints);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats << uints);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats << halfs);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats << floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats << doubles);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats << min16floats);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats << min10floats);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats << min16ints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats << min12ints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats << min16uints);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats << int16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+min16floats = (min16floats << int32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+min16floats = (min16floats << int64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+min16floats = (min16floats << uint16_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+min16floats = (min16floats << uint32_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+min16floats = (min16floats << uint64_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+min16floats = (min16floats << float16_ts);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16floats = (min16floats << float32_ts);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16floats = (min16floats << float64_ts);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+min10floats = (min10floats << bools);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats << ints);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats << uints);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats << halfs);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats << floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats << doubles);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats << min16floats);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats << min10floats);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats << min16ints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats << min12ints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats << min16uints);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats << int16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+min10floats = (min10floats << int32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+min10floats = (min10floats << int64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+min10floats = (min10floats << uint16_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+min10floats = (min10floats << uint32_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+min10floats = (min10floats << uint64_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+min10floats = (min10floats << float16_ts);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min10floats = (min10floats << float32_ts);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min10floats = (min10floats << float64_ts);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints << bools)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints << ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints << uints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+min16ints = (min16ints << halfs);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints << floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints << doubles);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints << min16floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints << min10floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints << min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints << min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints << min16uints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints << int16_ts)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints << int32_ts)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints << int64_ts)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints << uint16_ts)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints << uint32_ts)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints << uint64_ts)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+min16ints = (min16ints << float16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16ints = (min16ints << float32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16ints = (min16ints << float64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints << bools)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints << ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints << uints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+min12ints = (min12ints << halfs);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints << floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints << doubles);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints << min16floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints << min10floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints << min16ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints << min12ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints << min16uints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints << int16_ts)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints << int32_ts)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints << int64_ts)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints << uint16_ts)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints << uint32_ts)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints << uint64_ts)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+min12ints = (min12ints << float16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min12ints = (min12ints << float32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min12ints = (min12ints << float64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints << bools)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints << ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints << uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+min16uints = (min16uints << halfs);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints << floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints << doubles);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints << min16floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints << min10floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints << min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints << min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints << min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints << int16_ts)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints << int32_ts)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints << int64_ts)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints << uint16_ts)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints << uint32_ts)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints << uint64_ts)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+min16uints = (min16uints << float16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16uints = (min16uints << float32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16uints = (min16uints << float64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts << bools)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts << ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts << uints)>::value, "");
+int16_ts = (int16_ts << halfs);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts << floats); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts << doubles);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts << min16floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts << min10floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts << min16ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts << min12ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts << min16uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts << int16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts << int32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts << int64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts << uint16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts << uint32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts << uint64_ts)>::value, "");
+int16_ts = (int16_ts << float16_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts << float32_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts << float64_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts << bools)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts << ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts << uints)>::value, "");
+int32_ts = (int32_ts << halfs);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts << floats); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts << doubles);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts << min16floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts << min10floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts << min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts << min12ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts << min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts << int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts << int32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts << int64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts << uint16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts << uint32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts << uint64_ts)>::value, "");
+int32_ts = (int32_ts << float16_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts << float32_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts << float64_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts << bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts << ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts << uints)>::value, "");
+int64_ts = (int64_ts << halfs);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts << floats); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts << doubles);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts << min16floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts << min10floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts << min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts << min12ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts << min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts << int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts << int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts << int64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts << uint16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts << uint32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts << uint64_ts)>::value, "");
+int64_ts = (int64_ts << float16_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts << float32_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts << float64_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts << bools)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts << ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts << uints)>::value, "");
+uint16_ts = (uint16_ts << halfs);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts << floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts << doubles);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts << min16floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts << min10floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts << min16ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts << min12ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts << min16uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts << int16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts << int32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts << int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts << uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts << uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts << uint64_ts)>::value, "");
+uint16_ts = (uint16_ts << float16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts << float32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts << float64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts << bools)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts << ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts << uints)>::value, "");
+uint32_ts = (uint32_ts << halfs);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts << floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts << doubles);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts << min16floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts << min10floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts << min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts << min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts << min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts << int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts << int32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts << int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts << uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts << uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts << uint64_ts)>::value, "");
+uint32_ts = (uint32_ts << float16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts << float32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts << float64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts << bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts << ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts << uints)>::value, "");
+uint64_ts = (uint64_ts << halfs);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts << floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts << doubles);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts << min16floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts << min10floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts << min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts << min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts << min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts << int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts << int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts << int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts << uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts << uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts << uint64_ts)>::value, "");
+uint64_ts = (uint64_ts << float16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts << float32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts << float64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+float16_ts = (float16_ts << bools);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << ints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << uints);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << halfs);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << doubles);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << min16floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << min10floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << min16ints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << min12ints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << min16uints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << int16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << int32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << int64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << uint16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << uint32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << uint64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << float16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << float32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts << float64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float32_ts = (float32_ts << bools);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << ints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << uints);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << halfs);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << doubles);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << min16floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << min10floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << min16ints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << min12ints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << min16uints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << int16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << int32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << int64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << uint16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << uint32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << uint64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << float16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << float32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts << float64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float64_ts = (float64_ts << bools);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << ints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << uints);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << halfs);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << doubles);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << min16floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << min10floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << min16ints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << min12ints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << min16uints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << int16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << int32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << int64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << uint16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << uint32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << uint64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << float16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << float32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts << float64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(bools >> bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools >> ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools >> uints)>::value, "");
+ints = (bools >> halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (bools >> floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (bools >> doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (bools >> min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (bools >> min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(bools >> min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools >> min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools >> min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools >> int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools >> int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools >> int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools >> uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools >> uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools >> uint64_ts)>::value, "");
+ints = (bools >> float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+ints = (bools >> float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+ints = (bools >> float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints >> bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >> ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >> uints)>::value, "");
+ints = (ints >> halfs);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints >> floats);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints >> doubles);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints >> min16floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints >> min10floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(ints >> min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >> min12ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >> min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >> int16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >> int32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >> int64_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >> uint16_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >> uint32_ts)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints >> uint64_ts)>::value, "");
+ints = (ints >> float16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+ints = (ints >> float32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+ints = (ints >> float64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uints >> bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >> ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >> uints)>::value, "");
+uints = (uints >> halfs);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints >> floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints >> doubles);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints >> min16floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints >> min10floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<uint, __decltype(uints >> min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >> min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >> min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >> int16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >> int32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >> int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >> uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >> uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints >> uint64_ts)>::value, "");
+uints = (uints >> float16_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+uints = (uints >> float32_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+uints = (uints >> float64_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+halfs = (halfs >> bools);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs >> ints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs >> uints);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs >> halfs);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs >> floats);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs >> doubles);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs >> min16floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs >> min10floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs >> min16ints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs >> min12ints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs >> min16uints);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs >> int16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+halfs = (halfs >> int32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+halfs = (halfs >> int64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+halfs = (halfs >> uint16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+halfs = (halfs >> uint32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+halfs = (halfs >> uint64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+halfs = (halfs >> float16_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+halfs = (halfs >> float32_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+halfs = (halfs >> float64_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+floats = (floats >> bools);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats >> ints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats >> uints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats >> halfs);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats >> floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats >> doubles);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats >> min16floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats >> min10floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats >> min16ints);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats >> min12ints);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats >> min16uints); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats >> int16_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+floats = (floats >> int32_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+floats = (floats >> int64_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+floats = (floats >> uint16_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+floats = (floats >> uint32_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+floats = (floats >> uint64_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+floats = (floats >> float16_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+floats = (floats >> float32_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+floats = (floats >> float64_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+doubles = (doubles >> bools);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles >> ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles >> uints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles >> halfs);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles >> floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles >> doubles);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles >> min16floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles >> min10floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles >> min16ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles >> min12ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles >> min16uints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles >> int16_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+doubles = (doubles >> int32_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+doubles = (doubles >> int64_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+doubles = (doubles >> uint16_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+doubles = (doubles >> uint32_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+doubles = (doubles >> uint64_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+doubles = (doubles >> float16_ts);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+doubles = (doubles >> float32_ts);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+doubles = (doubles >> float64_ts);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+min16floats = (min16floats >> bools);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats >> ints);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats >> uints);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats >> halfs);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats >> floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats >> doubles);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats >> min16floats);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats >> min10floats);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats >> min16ints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats >> min12ints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats >> min16uints);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats >> int16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+min16floats = (min16floats >> int32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+min16floats = (min16floats >> int64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+min16floats = (min16floats >> uint16_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+min16floats = (min16floats >> uint32_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+min16floats = (min16floats >> uint64_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+min16floats = (min16floats >> float16_ts);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16floats = (min16floats >> float32_ts);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16floats = (min16floats >> float64_ts);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+min10floats = (min10floats >> bools);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats >> ints);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats >> uints);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats >> halfs);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats >> floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats >> doubles);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats >> min16floats);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats >> min10floats);                 /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats >> min16ints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats >> min12ints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats >> min16uints);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats >> int16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+min10floats = (min10floats >> int32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+min10floats = (min10floats >> int64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+min10floats = (min10floats >> uint16_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+min10floats = (min10floats >> uint32_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+min10floats = (min10floats >> uint64_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+min10floats = (min10floats >> float16_ts);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min10floats = (min10floats >> float32_ts);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min10floats = (min10floats >> float64_ts);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >> bools)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >> ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >> uints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+min16ints = (min16ints >> halfs);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints >> floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints >> doubles);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints >> min16floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints >> min10floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >> min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >> min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >> min16uints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >> int16_ts)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >> int32_ts)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >> int64_ts)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >> uint16_ts)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >> uint32_ts)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints >> uint64_ts)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+min16ints = (min16ints >> float16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16ints = (min16ints >> float32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16ints = (min16ints >> float64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >> bools)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >> ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >> uints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+min12ints = (min12ints >> halfs);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints >> floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints >> doubles);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints >> min16floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints >> min10floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >> min16ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >> min12ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >> min16uints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >> int16_ts)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >> int32_ts)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >> int64_ts)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >> uint16_ts)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >> uint32_ts)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints >> uint64_ts)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+min12ints = (min12ints >> float16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min12ints = (min12ints >> float32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min12ints = (min12ints >> float64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >> bools)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >> ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >> uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+min16uints = (min16uints >> halfs);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints >> floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints >> doubles);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints >> min16floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints >> min10floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >> min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >> min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >> min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >> int16_ts)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >> int32_ts)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >> int64_ts)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >> uint16_ts)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >> uint32_ts)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints >> uint64_ts)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+min16uints = (min16uints >> float16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16uints = (min16uints >> float32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16uints = (min16uints >> float64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >> bools)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >> ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >> uints)>::value, "");
+int16_ts = (int16_ts >> halfs);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts >> floats); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts >> doubles);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts >> min16floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts >> min10floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >> min16ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >> min12ints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >> min16uints)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >> int16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >> int32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >> int64_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >> uint16_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >> uint32_ts)>::value, "");
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts >> uint64_ts)>::value, "");
+int16_ts = (int16_ts >> float16_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts >> float32_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts >> float64_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >> bools)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >> ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >> uints)>::value, "");
+int32_ts = (int32_ts >> halfs);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts >> floats); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts >> doubles);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts >> min16floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts >> min10floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >> min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >> min12ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >> min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >> int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >> int32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >> int64_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >> uint16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >> uint32_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts >> uint64_ts)>::value, "");
+int32_ts = (int32_ts >> float16_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts >> float32_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts >> float64_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >> bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >> ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >> uints)>::value, "");
+int64_ts = (int64_ts >> halfs);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts >> floats); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts >> doubles);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts >> min16floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts >> min10floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >> min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >> min12ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >> min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >> int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >> int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >> int64_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >> uint16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >> uint32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts >> uint64_ts)>::value, "");
+int64_ts = (int64_ts >> float16_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts >> float32_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts >> float64_ts);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >> bools)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >> ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >> uints)>::value, "");
+uint16_ts = (uint16_ts >> halfs);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts >> floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts >> doubles);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts >> min16floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts >> min10floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >> min16ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >> min12ints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >> min16uints)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >> int16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >> int32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >> int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >> uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >> uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts >> uint64_ts)>::value, "");
+uint16_ts = (uint16_ts >> float16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts >> float32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts >> float64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >> bools)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >> ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >> uints)>::value, "");
+uint32_ts = (uint32_ts >> halfs);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts >> floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts >> doubles);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts >> min16floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts >> min10floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >> min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >> min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >> min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >> int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >> int32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >> int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >> uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >> uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts >> uint64_ts)>::value, "");
+uint32_ts = (uint32_ts >> float16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts >> float32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts >> float64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >> bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >> ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >> uints)>::value, "");
+uint64_ts = (uint64_ts >> halfs);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts >> floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts >> doubles);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts >> min16floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts >> min10floats);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >> min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >> min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >> min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >> int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >> int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >> int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >> uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >> uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts >> uint64_ts)>::value, "");
+uint64_ts = (uint64_ts >> float16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts >> float32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts >> float64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+float16_ts = (float16_ts >> bools);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> ints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> uints);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> halfs);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> doubles);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> min16floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> min10floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> min16ints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> min12ints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> min16uints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> int16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> int32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> int64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> uint16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> uint32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> uint64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> float16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> float32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts >> float64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float32_ts = (float32_ts >> bools);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> ints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> uints);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> halfs);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> doubles);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> min16floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> min10floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> min16ints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> min12ints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> min16uints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> int16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> int32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> int64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> uint16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> uint32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> uint64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> float16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> float32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts >> float64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float64_ts = (float64_ts >> bools);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> ints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> uints);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> halfs);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> doubles);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> min16floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> min10floats);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> min16ints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> min12ints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> min16uints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> int16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> int32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> int64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> uint16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> uint32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> uint64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> float16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> float32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts >> float64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(bools & bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools & ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools & uints)>::value, "");
+bools = (bools & halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+bools = (bools & floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+bools = (bools & doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+bools = (bools & min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+bools = (bools & min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(bools & min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools & min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools & min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools & int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(bools & int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(bools & int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools & uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(bools & uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(bools & uint64_ts)>::value, "");
+bools = (bools & float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+bools = (bools & float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+bools = (bools & float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints & bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints & ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints & uints)>::value, "");
+ints = (ints & halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints & floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints & doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints & min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints & min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(ints & min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints & min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints & min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints & int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(ints & int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(ints & int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints & uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(ints & uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(ints & uint64_ts)>::value, "");
+ints = (ints & float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+ints = (ints & float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+ints = (ints & float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uints & bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints & ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints & uints)>::value, "");
+uints = (uints & halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints & floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints & doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints & min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints & min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<uint, __decltype(uints & min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints & min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints & min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints & int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints & int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints & int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints & uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints & uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints & uint64_ts)>::value, "");
+uints = (uints & float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+uints = (uints & float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+uints = (uints & float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+halfs = (halfs & bools);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs & ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs & uints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs & halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs & floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs & doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs & min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs & min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs & min16ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs & min12ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs & min16uints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs & int16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+halfs = (halfs & int32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+halfs = (halfs & int64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+halfs = (halfs & uint16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+halfs = (halfs & uint32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+halfs = (halfs & uint64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+halfs = (halfs & float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+halfs = (halfs & float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+halfs = (halfs & float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+floats = (floats & bools);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats & ints);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats & uints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats & halfs);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats & floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats & doubles);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats & min16floats); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats & min10floats); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats & min16ints);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats & min12ints);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats & min16uints);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats & int16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+floats = (floats & int32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+floats = (floats & int64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+floats = (floats & uint16_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+floats = (floats & uint32_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+floats = (floats & uint64_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+floats = (floats & float16_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+floats = (floats & float32_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+floats = (floats & float64_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+doubles = (doubles & bools);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles & ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles & uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles & halfs);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles & floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles & doubles);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles & min16floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles & min10floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles & min16ints); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles & min12ints); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles & min16uints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles & int16_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+doubles = (doubles & int32_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+doubles = (doubles & int64_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+doubles = (doubles & uint16_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+doubles = (doubles & uint32_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+doubles = (doubles & uint64_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+doubles = (doubles & float16_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+doubles = (doubles & float32_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+doubles = (doubles & float64_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+min16floats = (min16floats & bools);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats & ints);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats & uints);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats & halfs);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats & floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats & doubles);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats & min16floats);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats & min10floats);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats & min16ints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats & min12ints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats & min16uints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats & int16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+min16floats = (min16floats & int32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+min16floats = (min16floats & int64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+min16floats = (min16floats & uint16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+min16floats = (min16floats & uint32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+min16floats = (min16floats & uint64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+min16floats = (min16floats & float16_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16floats = (min16floats & float32_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16floats = (min16floats & float64_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+min10floats = (min10floats & bools);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats & ints);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats & uints);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats & halfs);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats & floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats & doubles);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats & min16floats);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats & min10floats);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats & min16ints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats & min12ints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats & min16uints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats & int16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+min10floats = (min10floats & int32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+min10floats = (min10floats & int64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+min10floats = (min10floats & uint16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+min10floats = (min10floats & uint32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+min10floats = (min10floats & uint64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+min10floats = (min10floats & float16_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min10floats = (min10floats & float32_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min10floats = (min10floats & float64_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(min16ints & bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min16ints & ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16ints & uints)>::value, "");
+min16ints = (min16ints & halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints & floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints & doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints & min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints & min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints & min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints & min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16ints & min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min16ints & int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min16ints & int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min16ints & int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16ints & uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16ints & uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16ints & uint64_ts)>::value, "");
+min16ints = (min16ints & float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16ints = (min16ints & float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16ints = (min16ints & float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(min12ints & bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min12ints & ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min12ints & uints)>::value, "");
+min12ints = (min12ints & halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints & floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints & doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints & min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints & min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min12ints & min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints & min12ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min12ints & min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min12ints & int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min12ints & int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min12ints & int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min12ints & uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min12ints & uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min12ints & uint64_ts)>::value, "");
+min12ints = (min12ints & float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min12ints = (min12ints & float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min12ints = (min12ints & float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(min16uints & bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(min16uints & ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16uints & uints)>::value, "");
+min16uints = (min16uints & halfs);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints & floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints & doubles);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints & min16floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints & min10floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints & min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints & min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints & min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints & int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints & int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints & int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints & uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints & uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints & uint64_ts)>::value, "");
+min16uints = (min16uints & float16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16uints = (min16uints & float32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16uints = (min16uints & float64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(int16_ts & bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(int16_ts & ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int16_ts & uints)>::value, "");
+int16_ts = (int16_ts & halfs);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts & floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts & doubles); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts & min16floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts & min10floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<min16int, __decltype(int16_ts & min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts & min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(int16_ts & min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts & int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int16_ts & int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int16_ts & int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(int16_ts & uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int16_ts & uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int16_ts & uint64_ts)>::value, "");
+int16_ts = (int16_ts & float16_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts & float32_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts & float64_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int, __decltype(int32_ts & bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int32_ts & ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int32_ts & uints)>::value, "");
+int32_ts = (int32_ts & halfs);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts & floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts & doubles); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts & min16floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts & min10floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts & min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts & min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts & min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts & int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts & int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int32_ts & int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts & uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts & uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int32_ts & uint64_ts)>::value, "");
+int32_ts = (int32_ts & float16_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts & float32_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts & float64_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts & bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts & ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts & uints)>::value, "");
+int64_ts = (int64_ts & halfs);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts & floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts & doubles); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts & min16floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts & min10floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts & min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts & min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts & min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts & int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts & int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts & int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts & uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts & uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts & uint64_ts)>::value, "");
+int64_ts = (int64_ts & float16_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts & float32_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts & float64_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uint16_ts & bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uint16_ts & ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint16_ts & uints)>::value, "");
+uint16_ts = (uint16_ts & halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts & floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts & doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts & min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts & min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts & min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts & min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts & min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts & int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts & int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts & int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts & uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts & uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts & uint64_ts)>::value, "");
+uint16_ts = (uint16_ts & float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts & float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts & float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uint32_ts & bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts & ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts & uints)>::value, "");
+uint32_ts = (uint32_ts & halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts & floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts & doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts & min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts & min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts & min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts & min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts & min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts & int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts & int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts & int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts & uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts & uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts & uint64_ts)>::value, "");
+uint32_ts = (uint32_ts & float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts & float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts & float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts & bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts & ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts & uints)>::value, "");
+uint64_ts = (uint64_ts & halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts & floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts & doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts & min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts & min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts & min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts & min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts & min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts & int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts & int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts & int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts & uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts & uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts & uint64_ts)>::value, "");
+uint64_ts = (uint64_ts & float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts & float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts & float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+float16_ts = (float16_ts & bools);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & uints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & halfs);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & doubles);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & min16floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & min10floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & min16ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & min12ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & min16uints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & int16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & int32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & int64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & uint16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & uint32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & uint64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & float16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & float32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts & float64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float32_ts = (float32_ts & bools);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & uints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & halfs);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & doubles);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & min16floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & min10floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & min16ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & min12ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & min16uints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & int16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & int32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & int64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & uint16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & uint32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & uint64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & float16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & float32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts & float64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float64_ts = (float64_ts & bools);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & uints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & halfs);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & doubles);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & min16floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & min10floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & min16ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & min12ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & min16uints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & int16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & int32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & int64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & uint16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & uint32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & uint64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & float16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & float32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts & float64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(bools | bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools | ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools | uints)>::value, "");
+bools = (bools | halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+bools = (bools | floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+bools = (bools | doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+bools = (bools | min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+bools = (bools | min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(bools | min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools | min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools | min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools | int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(bools | int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(bools | int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools | uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(bools | uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(bools | uint64_ts)>::value, "");
+bools = (bools | float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+bools = (bools | float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+bools = (bools | float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints | bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints | ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints | uints)>::value, "");
+ints = (ints | halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints | floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints | doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints | min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints | min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(ints | min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints | min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints | min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints | int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(ints | int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(ints | int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints | uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(ints | uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(ints | uint64_ts)>::value, "");
+ints = (ints | float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+ints = (ints | float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+ints = (ints | float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uints | bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints | ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints | uints)>::value, "");
+uints = (uints | halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints | floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints | doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints | min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints | min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<uint, __decltype(uints | min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints | min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints | min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints | int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints | int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints | int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints | uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints | uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints | uint64_ts)>::value, "");
+uints = (uints | float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+uints = (uints | float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+uints = (uints | float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+halfs = (halfs | bools);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs | ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs | uints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs | halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs | floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs | doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs | min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs | min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs | min16ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs | min12ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs | min16uints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs | int16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+halfs = (halfs | int32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+halfs = (halfs | int64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+halfs = (halfs | uint16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+halfs = (halfs | uint32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+halfs = (halfs | uint64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+halfs = (halfs | float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+halfs = (halfs | float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+halfs = (halfs | float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+floats = (floats | bools);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats | ints);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats | uints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats | halfs);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats | floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats | doubles);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats | min16floats); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats | min10floats); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats | min16ints);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats | min12ints);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats | min16uints);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats | int16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+floats = (floats | int32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+floats = (floats | int64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+floats = (floats | uint16_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+floats = (floats | uint32_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+floats = (floats | uint64_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+floats = (floats | float16_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+floats = (floats | float32_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+floats = (floats | float64_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+doubles = (doubles | bools);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles | ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles | uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles | halfs);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles | floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles | doubles);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles | min16floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles | min10floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles | min16ints); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles | min12ints); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles | min16uints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles | int16_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+doubles = (doubles | int32_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+doubles = (doubles | int64_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+doubles = (doubles | uint16_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+doubles = (doubles | uint32_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+doubles = (doubles | uint64_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+doubles = (doubles | float16_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+doubles = (doubles | float32_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+doubles = (doubles | float64_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+min16floats = (min16floats | bools);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats | ints);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats | uints);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats | halfs);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats | floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats | doubles);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats | min16floats);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats | min10floats);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats | min16ints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats | min12ints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats | min16uints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats | int16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+min16floats = (min16floats | int32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+min16floats = (min16floats | int64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+min16floats = (min16floats | uint16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+min16floats = (min16floats | uint32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+min16floats = (min16floats | uint64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+min16floats = (min16floats | float16_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16floats = (min16floats | float32_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16floats = (min16floats | float64_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+min10floats = (min10floats | bools);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats | ints);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats | uints);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats | halfs);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats | floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats | doubles);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats | min16floats);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats | min10floats);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats | min16ints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats | min12ints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats | min16uints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats | int16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+min10floats = (min10floats | int32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+min10floats = (min10floats | int64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+min10floats = (min10floats | uint16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+min10floats = (min10floats | uint32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+min10floats = (min10floats | uint64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+min10floats = (min10floats | float16_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min10floats = (min10floats | float32_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min10floats = (min10floats | float64_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(min16ints | bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min16ints | ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16ints | uints)>::value, "");
+min16ints = (min16ints | halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints | floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints | doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints | min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints | min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints | min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints | min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16ints | min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min16ints | int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min16ints | int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min16ints | int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16ints | uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16ints | uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16ints | uint64_ts)>::value, "");
+min16ints = (min16ints | float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16ints = (min16ints | float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16ints = (min16ints | float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(min12ints | bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min12ints | ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min12ints | uints)>::value, "");
+min12ints = (min12ints | halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints | floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints | doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints | min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints | min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min12ints | min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints | min12ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min12ints | min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min12ints | int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min12ints | int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min12ints | int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min12ints | uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min12ints | uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min12ints | uint64_ts)>::value, "");
+min12ints = (min12ints | float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min12ints = (min12ints | float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min12ints = (min12ints | float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(min16uints | bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(min16uints | ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16uints | uints)>::value, "");
+min16uints = (min16uints | halfs);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints | floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints | doubles);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints | min16floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints | min10floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints | min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints | min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints | min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints | int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints | int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints | int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints | uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints | uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints | uint64_ts)>::value, "");
+min16uints = (min16uints | float16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16uints = (min16uints | float32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16uints = (min16uints | float64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(int16_ts | bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(int16_ts | ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int16_ts | uints)>::value, "");
+int16_ts = (int16_ts | halfs);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts | floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts | doubles); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts | min16floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts | min10floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<min16int, __decltype(int16_ts | min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts | min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(int16_ts | min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts | int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int16_ts | int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int16_ts | int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(int16_ts | uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int16_ts | uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int16_ts | uint64_ts)>::value, "");
+int16_ts = (int16_ts | float16_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts | float32_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts | float64_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int, __decltype(int32_ts | bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int32_ts | ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int32_ts | uints)>::value, "");
+int32_ts = (int32_ts | halfs);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts | floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts | doubles); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts | min16floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts | min10floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts | min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts | min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts | min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts | int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts | int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int32_ts | int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts | uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts | uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int32_ts | uint64_ts)>::value, "");
+int32_ts = (int32_ts | float16_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts | float32_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts | float64_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts | bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts | ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts | uints)>::value, "");
+int64_ts = (int64_ts | halfs);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts | floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts | doubles); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts | min16floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts | min10floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts | min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts | min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts | min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts | int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts | int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts | int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts | uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts | uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts | uint64_ts)>::value, "");
+int64_ts = (int64_ts | float16_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts | float32_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts | float64_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uint16_ts | bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uint16_ts | ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint16_ts | uints)>::value, "");
+uint16_ts = (uint16_ts | halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts | floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts | doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts | min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts | min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts | min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts | min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts | min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts | int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts | int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts | int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts | uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts | uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts | uint64_ts)>::value, "");
+uint16_ts = (uint16_ts | float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts | float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts | float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uint32_ts | bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts | ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts | uints)>::value, "");
+uint32_ts = (uint32_ts | halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts | floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts | doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts | min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts | min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts | min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts | min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts | min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts | int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts | int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts | int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts | uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts | uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts | uint64_ts)>::value, "");
+uint32_ts = (uint32_ts | float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts | float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts | float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts | bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts | ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts | uints)>::value, "");
+uint64_ts = (uint64_ts | halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts | floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts | doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts | min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts | min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts | min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts | min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts | min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts | int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts | int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts | int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts | uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts | uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts | uint64_ts)>::value, "");
+uint64_ts = (uint64_ts | float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts | float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts | float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+float16_ts = (float16_ts | bools);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | uints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | halfs);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | doubles);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | min16floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | min10floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | min16ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | min12ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | min16uints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | int16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | int32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | int64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | uint16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | uint32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | uint64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | float16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | float32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts | float64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float32_ts = (float32_ts | bools);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | uints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | halfs);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | doubles);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | min16floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | min10floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | min16ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | min12ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | min16uints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | int16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | int32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | int64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | uint16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | uint32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | uint64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | float16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | float32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts | float64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float64_ts = (float64_ts | bools);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | uints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | halfs);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | doubles);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | min16floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | min10floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | min16ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | min12ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | min16uints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | int16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | int32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | int64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | uint16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | uint32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | uint64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | float16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | float32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts | float64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(bools ^ bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools ^ ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools ^ uints)>::value, "");
+bools = (bools ^ halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+bools = (bools ^ floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+bools = (bools ^ doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+bools = (bools ^ min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+bools = (bools ^ min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(bools ^ min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools ^ min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools ^ min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(bools ^ int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(bools ^ int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(bools ^ int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(bools ^ uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(bools ^ uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(bools ^ uint64_ts)>::value, "");
+bools = (bools ^ float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+bools = (bools ^ float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+bools = (bools ^ float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(ints ^ bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^ ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints ^ uints)>::value, "");
+ints = (ints ^ halfs);           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints ^ floats);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints ^ doubles);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints ^ min16floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+ints = (ints ^ min10floats);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<int, __decltype(ints ^ min16ints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^ min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints ^ min16uints)>::value, "");
+_Static_assert(std::is_same<int, __decltype(ints ^ int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(ints ^ int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(ints ^ int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(ints ^ uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(ints ^ uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(ints ^ uint64_ts)>::value, "");
+ints = (ints ^ float16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+ints = (ints ^ float32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+ints = (ints ^ float64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uints ^ bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^ ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^ uints)>::value, "");
+uints = (uints ^ halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints ^ floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints ^ doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints ^ min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+uints = (uints ^ min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<uint, __decltype(uints ^ min16ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^ min12ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^ min16uints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^ int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints ^ int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints ^ int64_ts)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uints ^ uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uints ^ uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uints ^ uint64_ts)>::value, "");
+uints = (uints ^ float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+uints = (uints ^ float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+uints = (uints ^ float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+halfs = (halfs ^ bools);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs ^ ints);          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs ^ uints);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs ^ halfs);         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs ^ floats);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs ^ doubles);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs ^ min16floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs ^ min10floats);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs ^ min16ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs ^ min12ints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs ^ min16uints);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+halfs = (halfs ^ int16_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+halfs = (halfs ^ int32_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+halfs = (halfs ^ int64_ts);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+halfs = (halfs ^ uint16_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+halfs = (halfs ^ uint32_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+halfs = (halfs ^ uint64_ts);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+halfs = (halfs ^ float16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+halfs = (halfs ^ float32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+halfs = (halfs ^ float64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+floats = (floats ^ bools);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats ^ ints);        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats ^ uints);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats ^ halfs);       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats ^ floats);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats ^ doubles);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats ^ min16floats); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats ^ min10floats); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats ^ min16ints);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats ^ min12ints);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats ^ min16uints);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+floats = (floats ^ int16_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+floats = (floats ^ int32_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+floats = (floats ^ int64_ts);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+floats = (floats ^ uint16_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+floats = (floats ^ uint32_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+floats = (floats ^ uint64_ts);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+floats = (floats ^ float16_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+floats = (floats ^ float32_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+floats = (floats ^ float64_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+doubles = (doubles ^ bools);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles ^ ints);      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles ^ uints);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles ^ halfs);     /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles ^ floats);    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles ^ doubles);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles ^ min16floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles ^ min10floats);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles ^ min16ints); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles ^ min12ints); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles ^ min16uints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+doubles = (doubles ^ int16_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+doubles = (doubles ^ int32_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+doubles = (doubles ^ int64_ts);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+doubles = (doubles ^ uint16_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+doubles = (doubles ^ uint32_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+doubles = (doubles ^ uint64_ts); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+doubles = (doubles ^ float16_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+doubles = (doubles ^ float32_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+doubles = (doubles ^ float64_ts);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+min16floats = (min16floats ^ bools);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats ^ ints);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats ^ uints);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats ^ halfs);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats ^ floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats ^ doubles);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats ^ min16floats);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats ^ min10floats);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats ^ min16ints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats ^ min12ints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats ^ min16uints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16floats = (min16floats ^ int16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+min16floats = (min16floats ^ int32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+min16floats = (min16floats ^ int64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+min16floats = (min16floats ^ uint16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+min16floats = (min16floats ^ uint32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+min16floats = (min16floats ^ uint64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+min16floats = (min16floats ^ float16_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16floats = (min16floats ^ float32_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16floats = (min16floats ^ float64_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+min10floats = (min10floats ^ bools);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats ^ ints);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats ^ uints);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats ^ halfs);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats ^ floats);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats ^ doubles);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats ^ min16floats);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats ^ min10floats);                  /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats ^ min16ints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats ^ min12ints);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats ^ min16uints);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min10floats = (min10floats ^ int16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+min10floats = (min10floats ^ int32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+min10floats = (min10floats ^ int64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+min10floats = (min10floats ^ uint16_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+min10floats = (min10floats ^ uint32_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+min10floats = (min10floats ^ uint64_ts);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+min10floats = (min10floats ^ float16_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min10floats = (min10floats ^ float32_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min10floats = (min10floats ^ float64_ts);                   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(min16ints ^ bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min16ints ^ ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16ints ^ uints)>::value, "");
+min16ints = (min16ints ^ halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints ^ floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints ^ doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints ^ min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16ints = (min16ints ^ min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^ min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16int, __decltype(min16ints ^ min12ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16ints ^ min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min16ints ^ int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min16ints ^ int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min16ints ^ int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16ints ^ uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16ints ^ uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16ints ^ uint64_ts)>::value, "");
+min16ints = (min16ints ^ float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16ints = (min16ints ^ float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16ints = (min16ints ^ float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(min12ints ^ bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(min12ints ^ ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min12ints ^ uints)>::value, "");
+min12ints = (min12ints ^ halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints ^ floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints ^ doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints ^ min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min12ints = (min12ints ^ min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16int, __decltype(min12ints ^ min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min12int, __decltype(min12ints ^ min12ints)>::value, "");    /* expected-warning {{min12int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min12ints ^ min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(min12ints ^ int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(min12ints ^ int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(min12ints ^ int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min12ints ^ uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min12ints ^ uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min12ints ^ uint64_ts)>::value, "");
+min12ints = (min12ints ^ float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min12ints = (min12ints ^ float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min12ints = (min12ints ^ float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(min16uints ^ bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(min16uints ^ ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(min16uints ^ uints)>::value, "");
+min16uints = (min16uints ^ halfs);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints ^ floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints ^ doubles);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints ^ min16floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+min16uints = (min16uints ^ min10floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3082: int or unsigned int type required}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^ min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^ min12ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<min16uint, __decltype(min16uints ^ min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints ^ int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints ^ int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints ^ int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(min16uints ^ uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(min16uints ^ uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(min16uints ^ uint64_ts)>::value, "");
+min16uints = (min16uints ^ float16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+min16uints = (min16uints ^ float32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+min16uints = (min16uints ^ float64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+_Static_assert(std::is_same<int, __decltype(int16_ts ^ bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<int, __decltype(int16_ts ^ ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int16_ts ^ uints)>::value, "");
+int16_ts = (int16_ts ^ halfs);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts ^ floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts ^ doubles); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts ^ min16floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts ^ min10floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<min16int, __decltype(int16_ts ^ min16ints)>::value, "");    /* expected-warning {{min16int is promoted to int16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^ min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(int16_ts ^ min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<int16_t, __decltype(int16_ts ^ int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int16_ts ^ int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int16_ts ^ int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(int16_ts ^ uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int16_ts ^ uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int16_ts ^ uint64_ts)>::value, "");
+int16_ts = (int16_ts ^ float16_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts ^ float32_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+int16_ts = (int16_ts ^ float64_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int16_ts'}} */
+_Static_assert(std::is_same<int, __decltype(int32_ts ^ bools)>::value, "");
+_Static_assert(std::is_same<int, __decltype(int32_ts ^ ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(int32_ts ^ uints)>::value, "");
+int32_ts = (int32_ts ^ halfs);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts ^ floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts ^ doubles); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts ^ min16floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts ^ min10floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^ min16ints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^ min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts ^ min16uints)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^ int16_ts)>::value, "");
+_Static_assert(std::is_same<int32_t, __decltype(int32_ts ^ int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int32_ts ^ int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts ^ uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(int32_ts ^ uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int32_ts ^ uint64_ts)>::value, "");
+int32_ts = (int32_ts ^ float16_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts ^ float32_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+int32_ts = (int32_ts ^ float64_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int32_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^ bools)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^ ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts ^ uints)>::value, "");
+int64_ts = (int64_ts ^ halfs);   /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts ^ floats);  /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts ^ doubles); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts ^ min16floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts ^ min10floats);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^ min16ints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^ min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts ^ min16uints)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^ int16_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^ int32_ts)>::value, "");
+_Static_assert(std::is_same<int64_t, __decltype(int64_ts ^ int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts ^ uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts ^ uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(int64_ts ^ uint64_ts)>::value, "");
+int64_ts = (int64_ts ^ float16_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts ^ float32_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+int64_ts = (int64_ts ^ float64_ts);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'int64_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uint16_ts ^ bools)>::value, "");    /* expected-error {{static_assert failed ""}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint, __decltype(uint16_ts ^ ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint16_ts ^ uints)>::value, "");
+uint16_ts = (uint16_ts ^ halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts ^ floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts ^ doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts ^ min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts ^ min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts ^ min16ints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^ min12ints)>::value, "");
+_Static_assert(std::is_same<min16uint, __decltype(uint16_ts ^ min16uints)>::value, "");    /* expected-warning {{min16uint is promoted to uint16_t}} fxc-pass {{}} */
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^ int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts ^ int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts ^ int64_ts)>::value, "");
+_Static_assert(std::is_same<uint16_t, __decltype(uint16_ts ^ uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint16_ts ^ uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint16_ts ^ uint64_ts)>::value, "");
+uint16_ts = (uint16_ts ^ float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts ^ float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+uint16_ts = (uint16_ts ^ float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint16_ts'}} */
+_Static_assert(std::is_same<uint, __decltype(uint32_ts ^ bools)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts ^ ints)>::value, "");
+_Static_assert(std::is_same<uint, __decltype(uint32_ts ^ uints)>::value, "");
+uint32_ts = (uint32_ts ^ halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts ^ floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts ^ doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts ^ min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts ^ min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^ min16ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^ min12ints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^ min16uints)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^ int16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^ int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts ^ int64_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^ uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint32_t, __decltype(uint32_ts ^ uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint32_ts ^ uint64_ts)>::value, "");
+uint32_ts = (uint32_ts ^ float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts ^ float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+uint32_ts = (uint32_ts ^ float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint32_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^ bools)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^ ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^ uints)>::value, "");
+uint64_ts = (uint64_ts ^ halfs); /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts ^ floats);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts ^ doubles);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts ^ min16floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts ^ min10floats);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^ min16ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^ min12ints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^ min16uints)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^ int16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^ int32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^ int64_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^ uint16_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^ uint32_ts)>::value, "");
+_Static_assert(std::is_same<uint64_t, __decltype(uint64_ts ^ uint64_ts)>::value, "");
+uint64_ts = (uint64_ts ^ float16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts ^ float32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+uint64_ts = (uint64_ts ^ float64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'uint64_ts'}} */
+float16_ts = (float16_ts ^ bools);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ uints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ halfs);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ doubles);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ min16floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ min10floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ min16ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ min12ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ min16uints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ int16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ int32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ int64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ uint16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ uint32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ uint64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ float16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ float32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float16_ts = (float16_ts ^ float64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float16_ts'}} */
+float32_ts = (float32_ts ^ bools);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ uints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ halfs);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ doubles);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ min16floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ min10floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ min16ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ min12ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ min16uints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ int16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ int32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ int64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ uint16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ uint32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ uint64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ float16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ float32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float32_ts = (float32_ts ^ float64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float32_ts'}} */
+float64_ts = (float64_ts ^ bools);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ ints);                           /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ uints);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ halfs);                          /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ floats);                         /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ doubles);                        /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ min16floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ min10floats);                    /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ min16ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ min12ints);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ min16uints);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ int16_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ int32_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ int64_ts);                       /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ uint16_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ uint32_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ uint64_ts);                      /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ float16_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ float32_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+float64_ts = (float64_ts ^ float64_ts);                     /* expected-error {{int or unsigned int type required}} fxc-error {{X3004: undeclared identifier 'float64_ts'}} */
+// GENERATED_BINARY_ARITH:END
   return param4;
+
 }

+ 0 - 5
tools/clang/test/HLSL/scalar-operators.hlsl

@@ -11,10 +11,6 @@
 
 // :FXC_VERIFY_ARGUMENTS: /E plain /T vs_5_1
 
-// To test with the classic compiler, run
-// %sdxroot%\tools\x86\fxc.exe /T vs_5_1 scalar-operators.hlsl
-// with vs_2_0 (the default) min16float usage produces a complaint that it's not supported
-
 float4 plain(float4 param4 : FOO) : FOO {
     bool        bools       = 0;
     int         ints        = 0;
@@ -70,7 +66,6 @@ float4 plain(float4 param4 : FOO) : FOO {
     _Static_assert(std::is_same<float , __decltype(floats      + min10floats)>::value, "");
     _Static_assert(std::is_same<float , __decltype(min10floats + floats)>::value, "");
 
-  // Generated by running and modifying %sdxroot%\windows\directx\dxg\HLSL\test\lib\HLSL\operators.js
   _Static_assert(std::is_same<int, __decltype(bools + bools)>::value, "");
   _Static_assert(std::is_same<int, __decltype(bools + ints)>::value, "");
   _Static_assert(std::is_same<uint, __decltype(bools + uints)>::value, "");

+ 55 - 9
tools/clang/test/HLSL/vector-syntax-exact-precision.hlsl

@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -no-min-precision -fsyntax-only -ffreestanding -verify %s
+// RUN: %clang_cc1 -enable-16bit-types -fsyntax-only -ffreestanding -verify -HV 2018 %s
 
 float3 f3_ones = 1.0.xxx;
 float3 f3_ones_exp = 2.0e+2.rrr;
@@ -90,19 +90,24 @@ void vector_out_of_bounds() {
 
 void vector_unsigned() {
    unsigned int4 intvector;
-   unsigned min16int4 min16vector;                          /* expected-warning {{min16int is promoted to int}} */
-   unsigned int64_t3 int64vector;
-   unsigned uint3 uintvector;
-   unsigned min16uint4 min16uintvector;                     /* expected-warning {{min16uint is promoted to uint}} */
-   unsigned uint64_t2 int64uintvector;
-   unsigned dword3 dwordvector; /* fxc-error {{X3000: unrecognized identifier 'dword3'}} */
+   unsigned min16int4 min16vector;                          /* expected-warning {{min16int is promoted to int}} fxc-error {{X3085: unsigned can not be used with type}} */
+   unsigned int64_t3 int64vector;                           /* fxc-error {{X3000: syntax error: unexpected token 'int64_t3'}} */
+   unsigned uint3 uintvector;                               /* fxc-error {{X3085: unsigned can not be used with type}} */
+   unsigned min16uint4 min16uintvector;                     /* expected-warning {{min16uint is promoted to uint}} fxc-error {{X3085: unsigned can not be used with type}} */
+   unsigned uint64_t2 int64uintvector;                      /* fxc-error {{X3000: syntax error: unexpected token 'uint64_t2'}} */
+   unsigned dword3 dwordvector; /* fxc-error {{X3000: syntax error: unexpected token 'dword3'}} */
 
    unsigned float2 floatvector; /* expected-error {{'float' cannot be signed or unsigned}} fxc-error {{X3085: unsigned can not be used with type}} */
    unsigned bool3 boolvector;   /* expected-error {{'bool' cannot be signed or unsigned}} fxc-error {{X3085: unsigned can not be used with type}} */
    unsigned half4 halfvector;   /* expected-error {{'half' cannot be signed or unsigned}} fxc-error {{X3085: unsigned can not be used with type}} */
    unsigned double1 doublevector;                           /* expected-error {{'double' cannot be signed or unsigned}} fxc-error {{X3085: unsigned can not be used with type}} */
-   unsigned min12int2 min12intvector;                       /* expected-warning {{min12int is promoted to min16int}} fxc-error {{X3085: unsigned can not be used with type}} */
-   unsigned min16float3 min16floatvector;                   /* expected-error {{'half' cannot be signed or unsigned}} expected-warning {{min16float is promoted to half}} fxc-error {{X3085: unsigned can not be used with type}} */
+   unsigned min12int2 min12intvector;                       /* expected-warning {{min12int is promoted to int16_t}} fxc-error {{X3085: unsigned can not be used with type}} */
+   unsigned min16float3 min16floatvector;                   /* expected-error {{'half' cannot be signed or unsigned}} expected-warning {{min16float is promoted to float16_t}} fxc-error {{X3085: unsigned can not be used with type}} */
+
+   unsigned int16_t1 int16_tvector;                         /* fxc-error {{X3000: syntax error: unexpected token 'int16_t1'}} */
+   unsigned int32_t1 int32_tvector;                         /* fxc-error {{X3000: syntax error: unexpected token 'int32_t1'}} */
+   unsigned int64_t1 int64_tvector;                         /* fxc-error {{X3000: syntax error: unexpected token 'int64_t1'}} */
+
 }
 
 float fn() {
@@ -174,6 +179,47 @@ float fn() {
     f.xx = 2; // expected-error {{vector is not assignable (contains duplicate components)}} fxc-error {{X3025: l-value specifies const object}}
     u3.x = u3.w;                                            /* expected-error {{vector swizzle 'w' is out of bounds}} fxc-error {{X3018: invalid subscript 'w'}} */
 
+
+    // vector for fixed width data types
+    int16_t1 int16_t1Vector1 = 0;                           /* fxc-error {{X3000: unrecognized identifier 'int16_t1'}} fxc-error {{X3000: unrecognized identifier 'int16_t1Vector1'}} */
+    int16_t2 int16_t1Vector2 = 1;                           /* fxc-error {{X3000: unrecognized identifier 'int16_t1Vector2'}} fxc-error {{X3000: unrecognized identifier 'int16_t2'}} */
+    int16_t3 int16_t1Vector3 = 2;                           /* fxc-error {{X3000: unrecognized identifier 'int16_t1Vector3'}} fxc-error {{X3000: unrecognized identifier 'int16_t3'}} */
+    int16_t4 int16_t1Vector4 = 3;                           /* fxc-error {{X3000: unrecognized identifier 'int16_t1Vector4'}} fxc-error {{X3000: unrecognized identifier 'int16_t4'}} */
+    int32_t1 int32_t1Vector1 = 4;                           /* fxc-error {{X3000: unrecognized identifier 'int32_t1'}} fxc-error {{X3000: unrecognized identifier 'int32_t1Vector1'}} */
+    int32_t2 int32_t1Vector2 = 5;                           /* fxc-error {{X3000: unrecognized identifier 'int32_t1Vector2'}} fxc-error {{X3000: unrecognized identifier 'int32_t2'}} */
+    int32_t3 int32_t1Vector3 = 6;                           /* fxc-error {{X3000: unrecognized identifier 'int32_t1Vector3'}} fxc-error {{X3000: unrecognized identifier 'int32_t3'}} */
+    int32_t4 int32_t1Vector4 = 7;                           /* fxc-error {{X3000: unrecognized identifier 'int32_t1Vector4'}} fxc-error {{X3000: unrecognized identifier 'int32_t4'}} */
+    int64_t1 int64_t1Vector1 = 8;                           /* fxc-error {{X3000: unrecognized identifier 'int64_t1'}} fxc-error {{X3000: unrecognized identifier 'int64_t1Vector1'}} */
+    int64_t2 int64_t1Vector2 = 9;                           /* fxc-error {{X3000: unrecognized identifier 'int64_t1Vector2'}} fxc-error {{X3000: unrecognized identifier 'int64_t2'}} */
+    int64_t3 int64_t1Vector3 = 10;                          /* fxc-error {{X3000: unrecognized identifier 'int64_t1Vector3'}} fxc-error {{X3000: unrecognized identifier 'int64_t3'}} */
+    int64_t4 int64_t1Vector4 = 11;                          /* fxc-error {{X3000: unrecognized identifier 'int64_t1Vector4'}} fxc-error {{X3000: unrecognized identifier 'int64_t4'}} */
+
+    uint16_t1 uint16_t1Vector1 = 0;                         /* fxc-error {{X3000: unrecognized identifier 'uint16_t1'}} fxc-error {{X3000: unrecognized identifier 'uint16_t1Vector1'}} */
+    uint16_t2 uint16_t1Vector2 = 1;                         /* fxc-error {{X3000: unrecognized identifier 'uint16_t1Vector2'}} fxc-error {{X3000: unrecognized identifier 'uint16_t2'}} */
+    uint16_t3 uint16_t1Vector3 = 2;                         /* fxc-error {{X3000: unrecognized identifier 'uint16_t1Vector3'}} fxc-error {{X3000: unrecognized identifier 'uint16_t3'}} */
+    uint16_t4 uint16_t1Vector4 = 3;                         /* fxc-error {{X3000: unrecognized identifier 'uint16_t1Vector4'}} fxc-error {{X3000: unrecognized identifier 'uint16_t4'}} */
+    uint32_t1 uint32_t1Vector1 = 4;                         /* fxc-error {{X3000: unrecognized identifier 'uint32_t1'}} fxc-error {{X3000: unrecognized identifier 'uint32_t1Vector1'}} */
+    uint32_t2 uint32_t1Vector2 = 5;                         /* fxc-error {{X3000: unrecognized identifier 'uint32_t1Vector2'}} fxc-error {{X3000: unrecognized identifier 'uint32_t2'}} */
+    uint32_t3 uint32_t1Vector3 = 6;                         /* fxc-error {{X3000: unrecognized identifier 'uint32_t1Vector3'}} fxc-error {{X3000: unrecognized identifier 'uint32_t3'}} */
+    uint32_t4 uint32_t1Vector4 = 7;                         /* fxc-error {{X3000: unrecognized identifier 'uint32_t1Vector4'}} fxc-error {{X3000: unrecognized identifier 'uint32_t4'}} */
+    uint64_t1 uint64_t1Vector1 = 8;                         /* fxc-error {{X3000: unrecognized identifier 'uint64_t1'}} fxc-error {{X3000: unrecognized identifier 'uint64_t1Vector1'}} */
+    uint64_t2 uint64_t1Vector2 = 9;                         /* fxc-error {{X3000: unrecognized identifier 'uint64_t1Vector2'}} fxc-error {{X3000: unrecognized identifier 'uint64_t2'}} */
+    uint64_t3 uint64_t1Vector3 = 10;                        /* fxc-error {{X3000: unrecognized identifier 'uint64_t1Vector3'}} fxc-error {{X3000: unrecognized identifier 'uint64_t3'}} */
+    uint64_t4 uint64_t1Vector4 = 11;                        /* fxc-error {{X3000: unrecognized identifier 'uint64_t1Vector4'}} fxc-error {{X3000: unrecognized identifier 'uint64_t4'}} */
+
+    float16_t1 float16_t1Vector1 = 1;                       /* fxc-error {{X3000: unrecognized identifier 'float16_t1'}} fxc-error {{X3000: unrecognized identifier 'float16_t1Vector1'}} */
+    float16_t2 float16_t1Vector2 = 2;                       /* fxc-error {{X3000: unrecognized identifier 'float16_t1Vector2'}} fxc-error {{X3000: unrecognized identifier 'float16_t2'}} */
+    float16_t3 float16_t1Vector3 = 3;                       /* fxc-error {{X3000: unrecognized identifier 'float16_t1Vector3'}} fxc-error {{X3000: unrecognized identifier 'float16_t3'}} */
+    float16_t4 float16_t1Vector4 = 4;                       /* fxc-error {{X3000: unrecognized identifier 'float16_t1Vector4'}} fxc-error {{X3000: unrecognized identifier 'float16_t4'}} */
+    float32_t1 float32_t1Vector1 = 5;                       /* fxc-error {{X3000: unrecognized identifier 'float32_t1'}} fxc-error {{X3000: unrecognized identifier 'float32_t1Vector1'}} */
+    float32_t2 float32_t1Vector2 = 6;                       /* fxc-error {{X3000: unrecognized identifier 'float32_t1Vector2'}} fxc-error {{X3000: unrecognized identifier 'float32_t2'}} */
+    float32_t3 float32_t1Vector3 = 7;                       /* fxc-error {{X3000: unrecognized identifier 'float32_t1Vector3'}} fxc-error {{X3000: unrecognized identifier 'float32_t3'}} */
+    float32_t4 float32_t1Vector4 = 8;                       /* fxc-error {{X3000: unrecognized identifier 'float32_t1Vector4'}} fxc-error {{X3000: unrecognized identifier 'float32_t4'}} */
+    float64_t1 float64_t1Vector1 = 9;                       /* fxc-error {{X3000: unrecognized identifier 'float64_t1'}} fxc-error {{X3000: unrecognized identifier 'float64_t1Vector1'}} */
+    float64_t2 float64_t1Vector2 = 10;                      /* fxc-error {{X3000: unrecognized identifier 'float64_t1Vector2'}} fxc-error {{X3000: unrecognized identifier 'float64_t2'}} */
+    float64_t3 float64_t1Vector3 = 11;                      /* fxc-error {{X3000: unrecognized identifier 'float64_t1Vector3'}} fxc-error {{X3000: unrecognized identifier 'float64_t3'}} */
+    float64_t4 float64_t1Vector4 = 12;                      /* fxc-error {{X3000: unrecognized identifier 'float64_t1Vector4'}} fxc-error {{X3000: unrecognized identifier 'float64_t4'}} */
+
     return f.x;
 }
 

+ 2 - 2
tools/clang/test/HLSL/vector-syntax.hlsl

@@ -91,10 +91,10 @@ void vector_out_of_bounds() {
 void vector_unsigned() {
    unsigned int4 intvector;
    unsigned min16int4 min16vector;
-   unsigned int64_t3 int64vector;
+   unsigned int64_t3 int64vector; /* */
    unsigned uint3 uintvector;
    unsigned min16uint4 min16uintvector;
-   unsigned uint64_t2 int64uintvector;
+   unsigned uint64_t2 int64uintvector;                      /* */
    unsigned dword3 dwordvector; /* fxc-error {{X3000: unrecognized identifier 'dword3'}} */
 
    unsigned float2 floatvector; /* expected-error {{'float' cannot be signed or unsigned}} fxc-error {{X3085: unsigned can not be used with type}} */

+ 4 - 6
tools/clang/tools/dxcompiler/dxcompilerobj.cpp

@@ -233,7 +233,7 @@ private:
       finished = true;
       return;
     }
-    DXASSERT(!opts.HLSL2015, "else ReadDxcOpts didn't fail for non-isense");
+    DXASSERT(opts.HLSLVersion > 2015, "else ReadDxcOpts didn't fail for non-isense");
     finished = false;
   }
 public:
@@ -735,7 +735,7 @@ public:
     // Setup a compiler instance.
     std::shared_ptr<TargetOptions> targetOptions(new TargetOptions);
     targetOptions->Triple = "dxil-ms-dx";
-    targetOptions->DescriptionString = Opts.NoMinPrecision
+    targetOptions->DescriptionString = Opts.Enable16BitTypes
       ? hlsl::DXIL::kNewLayoutString
       : hlsl::DXIL::kLegacyLayoutString;
     compiler.HlslLangExtensions = helper;
@@ -792,11 +792,9 @@ public:
     }
     compiler.getLangOpts().RootSigMajor = 1;
     compiler.getLangOpts().RootSigMinor = rootSigMinor;
-    compiler.getLangOpts().HLSL2015 = Opts.HLSL2015;
-    compiler.getLangOpts().HLSL2016 = Opts.HLSL2016;
-    compiler.getLangOpts().HLSL2017 = Opts.HLSL2017;
+    compiler.getLangOpts().HLSLVersion = (unsigned) Opts.HLSLVersion;
 
-    compiler.getLangOpts().UseMinPrecision = !Opts.NoMinPrecision;
+    compiler.getLangOpts().UseMinPrecision = !Opts.Enable16BitTypes;
 
 // SPIRV change starts
 #ifdef ENABLE_SPIRV_CODEGEN

+ 1 - 1
tools/clang/tools/dxlib-sample/lib_share_compile.cpp

@@ -94,7 +94,7 @@ static void ReadOptsAndValidate(hlsl::options::MainArgs &mainArgs,
     finished = true;
     return;
   }
-  DXASSERT(!opts.HLSL2015, "else ReadDxcOpts didn't fail for non-isense");
+  DXASSERT(opts.HLSLVersion > 2015, "else ReadDxcOpts didn't fail for non-isense");
   finished = false;
 }
 

+ 3 - 3
tools/clang/tools/libclang/CIndex.cpp

@@ -5575,7 +5575,7 @@ CXSourceRange clang_getTokenExtent(CXTranslationUnit TU, CXToken CXTok) {
 }
 
 // HLSL Change Starts
-static bool IsHLSLBuiltInType(IdentifierInfo* ii)
+static bool IsHLSLBuiltInType(IdentifierInfo* ii, const LangOptions &langOpts)
 {
   // Checks, purely by name, whether the specified identifier is considered a built-in type.
   clang::tok::TokenKind tokenKind = ii->getTokenID();
@@ -5591,7 +5591,7 @@ static bool IsHLSLBuiltInType(IdentifierInfo* ii)
   // Vectors and matrices can be parsed with internal lookup tables.
   hlsl::HLSLScalarType scalarType;
   int count;
-  return hlsl::TryParseAny(ii->getNameStart(), ii->getLength(), &scalarType, &count, &count);
+  return hlsl::TryParseAny(ii->getNameStart(), ii->getLength(), &scalarType, &count, &count, langOpts);
 }
 // HLSL Change Ends
 
@@ -5650,7 +5650,7 @@ static void getTokens(ASTUnit *CXXUnit, SourceRange Range,
         CXTok.int_data[0] = CXToken_Keyword;
       }
       // HLSL Change Starts - Check for HLSL built-in types
-      else if (IsHLSLBuiltInType(II)) {
+      else if (IsHLSLBuiltInType(II, CXXUnit->getLangOpts())) {
         CXTok.int_data[0] = CXToken_BuiltInType;
       }
       // HLSL Change Ends

+ 14 - 10
tools/clang/unittests/HLSL/CompilationResult.h

@@ -269,7 +269,7 @@ public:
     const int DisplayDiagnosticsToStdErrFalse = 0;
     const char* commandLineArgs[32];
     unsigned commandLineArgsCount = 0;
-    char* nextArg;
+    char* nextArg = arguments;
 
     // Set a very high number of errors to avoid giving up too early.
     commandLineArgs[commandLineArgsCount++] = "-ferror-limit=2000";
@@ -283,16 +283,20 @@ public:
     commandLineArgs[commandLineArgsCount++] = "-fno-color-diagnostics";
 
     IFE(isense->CreateIndex(&tuIndex));
-    while ((nextArg = strstr(arguments, "-")) != nullptr) {
-      commandLineArgs[commandLineArgsCount] = nextArg;
-      while (*nextArg && *nextArg != ' ')
-        ++nextArg;
-      if (*nextArg == ' ') {
-        *nextArg = 0;
-        ++nextArg;
+
+    // Split command line arguments by spaces
+    if (nextArg) {
+      // skip leading spaces
+      while (*nextArg == ' ')
+        nextArg++;
+      commandLineArgs[commandLineArgsCount++] = nextArg;
+      while ((*nextArg != '\0')) {
+        if (*nextArg == ' ') {
+          *nextArg = 0;
+          commandLineArgs[commandLineArgsCount++] = nextArg + 1;
+        }
+        nextArg++;
       }
-      arguments = nextArg;
-      ++commandLineArgsCount;
     }
 
     DxcTranslationUnitFlags options;

+ 39 - 2
tools/clang/unittests/HLSL/CompilerTest.cpp

@@ -427,7 +427,8 @@ public:
   TEST_METHOD(CompileHlsl2015ThenFail)
   TEST_METHOD(CompileHlsl2016ThenOK)
   TEST_METHOD(CompileHlsl2017ThenOK)
-  TEST_METHOD(CompileHlsl2018ThenFail)
+  TEST_METHOD(CompileHlsl2018ThenOK)
+  TEST_METHOD(CompileHlsl2019ThenFail)
   TEST_METHOD(CompileCBufferTBufferASTDump)
 
   TEST_METHOD(DiaLoadBadBitcodeThenFail)
@@ -554,6 +555,8 @@ public:
   TEST_METHOD(CodeGenFloatToBool)
   TEST_METHOD(CodeGenFirstbitHi)
   TEST_METHOD(CodeGenFirstbitLo)
+  TEST_METHOD(CodeGenFixedWidthTypes)
+  TEST_METHOD(CodeGenFixedWidthTypes16Bit)
   TEST_METHOD(CodeGenFloatMaxtessfactor)
   TEST_METHOD(CodeGenFModPS)
   TEST_METHOD(CodeGenFuncCast)
@@ -873,6 +876,7 @@ public:
   TEST_METHOD(CodeGenToinclude2_Mod)
   TEST_METHOD(CodeGenTypemods_Syntax_Mod)
   TEST_METHOD(CodeGenTypedBufferHalf)
+  TEST_METHOD(CodeGenTypedefNewType)
   TEST_METHOD(CodeGenVarmods_Syntax_Mod)
   TEST_METHOD(CodeGenVector_Assignments_Mod)
   TEST_METHOD(CodeGenVector_Syntax_Mix_Mod)
@@ -2788,7 +2792,7 @@ TEST_F(CompilerTest, CompileHlsl2017ThenOK) {
   VERIFY_SUCCEEDED(status);
 }
 
-TEST_F(CompilerTest, CompileHlsl2018ThenFail) {
+TEST_F(CompilerTest, CompileHlsl2018ThenOK) {
   CComPtr<IDxcCompiler> pCompiler;
   CComPtr<IDxcOperationResult> pResult;
   CComPtr<IDxcBlobEncoding> pSource;
@@ -2799,6 +2803,25 @@ TEST_F(CompilerTest, CompileHlsl2018ThenFail) {
 
   LPCWSTR args[2] = { L"-HV", L"2018" };
 
+  VERIFY_SUCCEEDED(pCompiler->Compile(pSource, L"source.hlsl", L"main",
+    L"ps_6_0", args, 2, nullptr, 0, nullptr, &pResult));
+
+  HRESULT status;
+  VERIFY_SUCCEEDED(pResult->GetStatus(&status));
+  VERIFY_SUCCEEDED(status);
+}
+
+TEST_F(CompilerTest, CompileHlsl2019ThenFail) {
+  CComPtr<IDxcCompiler> pCompiler;
+  CComPtr<IDxcOperationResult> pResult;
+  CComPtr<IDxcBlobEncoding> pSource;
+  CComPtr<IDxcBlobEncoding> pErrors;
+
+  VERIFY_SUCCEEDED(CreateCompiler(&pCompiler));
+  CreateBlobFromText("float4 main(float4 pos : SV_Position) : SV_Target { return pos; }", &pSource);
+
+  LPCWSTR args[2] = { L"-HV", L"2019" };
+
   VERIFY_SUCCEEDED(pCompiler->Compile(pSource, L"source.hlsl", L"main",
     L"ps_6_0", args, 2, nullptr, 0, nullptr, &pResult));
 
@@ -3385,6 +3408,16 @@ TEST_F(CompilerTest, CodeGenFirstbitLo) {
   CodeGenTestCheck(L"..\\CodeGenHLSL\\firstbitLo.hlsl");
 }
 
+TEST_F(CompilerTest, CodeGenFixedWidthTypes) {
+  if (m_ver.SkipDxilVersion(1, 2)) return;
+  CodeGenTestCheck(L"..\\CodeGenHLSL\\fixedWidth.hlsl");
+}
+
+TEST_F(CompilerTest, CodeGenFixedWidthTypes16Bit) {
+  if (m_ver.SkipDxilVersion(1, 2)) return;
+  CodeGenTestCheck(L"..\\CodeGenHLSL\\fixedWidth16Bit.hlsl");
+}
+
 TEST_F(CompilerTest, CodeGenFloatMaxtessfactor) {
   CodeGenTestCheck(L"..\\CodeGenHLSL\\FloatMaxtessfactorHs.hlsl");
 }
@@ -4669,6 +4702,10 @@ TEST_F(CompilerTest, CodeGenTypedBufferHalf) {
   CodeGenTestCheck(L"..\\CodeGenHLSL\\typed_buffer_half.hlsl");
 }
 
+TEST_F(CompilerTest, CodeGenTypedefNewType) {
+  CodeGenTestCheck(L"..\\CodeGenHLSL\\typedef_new_type.hlsl");
+}
+
 TEST_F(CompilerTest, CodeGenVarmods_Syntax_Mod) {
   CodeGenTest(L"..\\CodeGenHLSL\\varmods-syntax_Mod.hlsl");
 }

+ 3 - 4
tools/clang/unittests/HLSL/ExecutionTest.cpp

@@ -1897,13 +1897,12 @@ TEST_F(ExecutionTest, WaveIntrinsicsInPSTest) {
     "  result.position = position;\r\n"
     "  return result;\r\n"
     "}\r\n\r\n"
-    "typedef uint uint32_t;\r\n"
     "uint pos_to_id(float4 pos) { return pos.x * 128 + pos.y; }\r\n"
     "struct PerPixelData {\r\n"
     " float4 position;\r\n"
-    " uint32_t id, flags, laneIndex, laneCount, firstLaneId, sum1;\r\n"
-    " uint32_t id0, id1, id2, id3;\r\n"
-    " uint32_t acrossX, acrossY, acrossDiag, quadActiveCount;\r\n"
+    " uint id, flags, laneIndex, laneCount, firstLaneId, sum1;\r\n"
+    " uint id0, id1, id2, id3;\r\n"
+    " uint acrossX, acrossY, acrossDiag, quadActiveCount;\r\n"
     "};\r\n"
     "AppendStructuredBuffer<PerPixelData> g_sb : register(u1);\r\n"
     "float4 PSMain(PSInput input) : SV_TARGET {\r\n"

+ 2 - 2
tools/clang/unittests/HLSL/ValidationTest.cpp

@@ -1103,10 +1103,10 @@ TEST_F(ValidationTest, StreamIDOutOfBound) {
 
 TEST_F(ValidationTest, SignatureDataWidth) {
   if (m_ver.SkipDxilVersion(1, 2)) return;
-  std::vector<LPCWSTR> pArguments = { L"-no-min-precision" };
+  std::vector<LPCWSTR> pArguments = { L"-enable-16bit-types", L"-HV", L"2018" };
   RewriteAssemblyCheckMsg(
       L"..\\CodeGenHLSL\\signature_packing_by_width.hlsl", "ps_6_2",
-      pArguments.data(), 1, nullptr, 0,
+      pArguments.data(), 3, nullptr, 0,
       {"i8 8, i8 0, (![0-9]+), i8 2, i32 1, i8 2, i32 0, i8 0, null}"},
       {"i8 9, i8 0, \\1, i8 2, i32 1, i8 2, i32 0, i8 0, null}"},
       "signature element F at location \\(0, 2\\) size \\(1, 2\\) has data "

+ 5 - 0
tools/clang/unittests/HLSL/VerifierTest.cpp

@@ -54,6 +54,7 @@ public:
   TEST_METHOD(RunScalarAssignments);
   TEST_METHOD(RunScalarAssignmentsExactPrecision);
   TEST_METHOD(RunScalarOperatorsAssign);
+  TEST_METHOD(RunScalarOperatorsAssignExactPrecision);
   TEST_METHOD(RunScalarOperators);
   TEST_METHOD(RunScalarOperatorsExactPrecision);
   TEST_METHOD(RunString);
@@ -220,6 +221,10 @@ TEST_F(VerifierTest, RunScalarOperatorsAssign) {
   CheckVerifiesHLSL(L"scalar-operators-assign.hlsl");
 }
 
+TEST_F(VerifierTest, RunScalarOperatorsAssignExactPrecision) {
+  CheckVerifiesHLSL(L"scalar-operators-assign-exact-precision.hlsl");
+}
+
 TEST_F(VerifierTest, RunScalarOperators) {
   CheckVerifiesHLSL(L"scalar-operators.hlsl");
 }

+ 1 - 0
utils/hct/VerifierHelper.py

@@ -60,6 +60,7 @@ VerifierTests = {
     'RunPackReg': "packreg.hlsl",
     'RunScalarAssignments': "scalar-assignments.hlsl",
     'RunScalarOperatorsAssign': "scalar-operators-assign.hlsl",
+    'RunScalarOperatorsAssignExactPrecision': "scalar-operators-assign.hlsl",
     'RunScalarOperators': "scalar-operators.hlsl",
     'RunStructAssignments': "struct-assignments.hlsl",
     'RunTemplateChecks': "template-checks.hlsl",

+ 4 - 4
utils/hct/hcttestcmds.cmd

@@ -583,16 +583,16 @@ if %errorlevel% equ 0 (
   exit /b 1
 )
 
-dxc.exe %script_dir%\smoke.hlsl /Tps_6_2 /no-min-precision 1>nul
+dxc.exe %script_dir%\smoke.hlsl /Tps_6_2 /enable-16bit-types 1>nul
 if %errorlevel% neq 0 (
-  echo Failed to compile %script_dir%\smoke.hlsl with /no-min-precision option
+  echo Failed to compile %script_dir%\smoke.hlsl with /enable-16bit-types option
   call :cleanup 2>nul
   exit /b 1
 )
 
-dxc.exe %script_dir%\smoke.hlsl /Tps_6_1 /no-min-precision 2>nul
+dxc.exe %script_dir%\smoke.hlsl /Tps_6_1 /enable-16bit-types 2>nul
 if %errorlevel% equ 0 (
-  echo dxc incorrectly compiled %script_dir%\smoke.hlsl shader model 6.1 with /no-min-precision option
+  echo dxc incorrectly compiled %script_dir%\smoke.hlsl shader model 6.1 with /enable-16bit-types option
   call :cleanup 2>nul
   exit /b 1
 )