Instead of using an arbitrary unchecked list of parameters, require that SpirvType and SpirvOpaqueType take a type template parameter pack for the list of operands. For example, now SpirvOpaqueType is defined as
A type vk::integral_constant<typename T, T v> is defined in order to allow literal values as operands, and a type qualifier _spirv_immediate is defined in order to specify that a literal value should be embedded as an immediate value in the SPIR-V type-declaration instruction.
Instead of using an arbitrary unchecked list of parameters, require that
SpirvType
andSpirvOpaqueType
take a type template parameter pack for the list of operands. For example, nowSpirvOpaqueType
is defined asA type
vk::integral_constant<typename T, T v>
is defined in order to allow literal values as operands, and a type qualifier _spirv_immediate is defined in order to specify that a literal value should be embedded as an immediate value in the SPIR-V type-declaration instruction.@s-perron and @llvm-beanz for review.