<div dir="ltr"><div class="gmail_default" style="font-size:small"><br>I'm working on some translated C headers for Vulkan for use in FPC.<br><br>In the vulkan.h header file, we have the following:<br><br>    typedef uint32_t VkFlags;<br>    typedef enum VkSparseImageFormatFlagBits {<br>        VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001,<br>        VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002,<br>        VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,<br>    } VkSparseImageFormatFlagBits;<br>    typedef VkFlags VkSparseImageFormatFlags;<br><br>For code maintenance purposes, it is desirable to have a header translation that is as close as possible to the source. A reasonable translation to Pascal of this might be:<br><br>    TVkFlags = Cardinal;<br>    TVkSparseImageFormatFlagBits = <br>    (<br>        VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = $00000001,<br>        VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = $00000002,<br>        VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = $00000004<br>    );<br>    TVkSparseImageFormatFlags = TVkFlags;<br><br>    <br>However, this solution has only the *illusion* of being strongly typed -- nothing about which the compiler is aware links TVkImageCreateFlags with the TVkImageCreateFlagBits.<br><br>A seemingly better solution (albeit incorrect) would be the following:<br><br>    {$packset 4}<br>    TVkSparseImageFormatFlagBits = <br>    (<br>        VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = $00000001,<br>        VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = $00000002,<br>        VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = $00000004<br>    );<br>    TVkSparseImageFormatFlags = set of TVkSparseImageFormatFlagBits;<br>    <br>This will not give the expected results, because FPC interprets the enum constant as an exponent (or bit position, if you prefer).<br><br><br><br>My question is this: Is there currently a modifier for the set declaration that instructs the compiler to accept the enum values as literal constants, instead of interpreting them as exponents?<br><br>e.g. something like this:<br>    {$EnumConstantsUseLiteral}<br>    --or--<br>    TVkSparseImageFormatFlags = literalset of TVkSparseImageFormatFlagBits;<br>    --or--<br>    TVkSparseImageFormatFlags = set of TVkSparseImageFormatFlagBits; literal;<br>    --or--<br>    TVkSparseImageFormatFlags = set of literal TVkSparseImageFormatFlagBits;<br>    <br></div></div>