dmd
dmd copied to clipboard
substInout converts to enum base type if it is an array
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.