dmd icon indicating copy to clipboard operation
dmd copied to clipboard

substInout converts to enum base type if it is an array

Open rainers opened this issue 4 months ago • 0 comments

Running an enum type through core.traits.substInout converts it to its base type:

import core.internal.traits : substInout, Unqual;

struct S { int x; }
struct T { int x; alias x this; }

enum EnumInt { a = 123 }
enum EnumUInt : uint { a = 123 }
enum EnumFloat : float { a = 123 }
enum EnumString : string { a = "123" }
enum EnumStringW : wstring { a = "123" }
enum EnumStruct : S { a = S(7) }
enum EnumAliasThis : T { a = T(7) }
enum EnumDArray : int[] { a = [1] }
enum EnumAArray : int[int] { a = [0 : 1] }

pragma(msg, substInout!EnumInt);                  // EnumInt
pragma(msg, substInout!(inout(EnumUInt)));        // const(EnumUInt)
pragma(msg, substInout!EnumFloat);                // EnumFloat
pragma(msg, substInout!EnumString);               // string
pragma(msg, substInout!(inout(EnumStringW)));     // const(wstring)
pragma(msg, substInout!EnumStruct);               // EnumStruct
pragma(msg, substInout!EnumAliasThis);            // EnumAliasThis
pragma(msg, substInout!EnumDArray);               // int[]
pragma(msg, substInout!(inout(EnumAArray)[int])); // const(int[int])[int]

Unqual does not have that problem.

rainers avatar Jun 15 '25 10:06 rainers