Sorry for this lengthy post:

```x.d
void foo (T) ()
{
   import std.experimental.checkedint;
   alias CT = Checked!(T, Throw);
   CT a = CT.min;
   CT x;
   --x;
   CT b = x;
   CT c = a / b;
}

void bar (T) ()
{
   import std.stdio;
   try foo!T ();
   catch (Exception e)
      writefln ("caught <%s>", e.msg);
}

void main ()
{
   bar!byte;
   bar!char;
   bar!ushort;
   bar!short;
   bar!uint;
   bar!int;
   bar!ulong;
   bar!long;
}
```

$ dmd x.d

[...]/linux/bin64/../../src/phobos/std/experimental/checkedint.d(1410): 
Deprecation: integral promotion not done for `~cast(byte)0`, use 
'-preview=intpromote' switch or `~cast(int)(cast(byte)0)`
x.d(9): Error: template `std.experimental.checkedint.Checked!(byte, Throw).Checked.__ctor` cannot deduce function from argument types `!()(Checked!(int, Throw))`, candidates are:
[...]/linux/bin64/../../src/phobos/std/experimental/checkedint.d(331):        
`__ctor(U)(U rhs)`
x.d(15): Error: template instance `x.foo!byte` error instantiating
x.d(22):        instantiated from here: `bar!byte`
x.d(4): Error: template instance `std.experimental.checkedint.Checked!(char, Throw)` does not match template declaration `Checked(T, Hook = Abort)`
  with `T = char,
       Hook = Throw`
  must satisfy one of the following constraints:
`       isIntegral!T
       is(T == Checked!(U, H), U, H)`
x.d(15): Error: template instance `x.foo!char` error instantiating
x.d(23):        instantiated from here: `bar!char`
[...]/linux/bin64/../../src/phobos/std/experimental/checkedint.d(1410): 
Deprecation: integral promotion not done for `~cast(ushort)0u`, use 
'-preview=intpromote' switch or `~cast(int)(cast(ushort)0u)`
x.d(9): Error: template `std.experimental.checkedint.Checked!(ushort, Throw).Checked.__ctor` cannot deduce function from argument types `!()(Checked!(int, Throw))`, candidates are:
[...]/linux/bin64/../../src/phobos/std/experimental/checkedint.d(331):        
`__ctor(U)(U rhs)`
x.d(15): Error: template instance `x.foo!ushort` error instantiating
x.d(24):        instantiated from here: `bar!ushort`
[...]/linux/bin64/../../src/phobos/std/experimental/checkedint.d(1410): 
Deprecation: integral promotion not done for `~cast(short)0`, use 
'-preview=intpromote' switch or `~cast(int)(cast(short)0)`
x.d(9): Error: template `std.experimental.checkedint.Checked!(short, Throw).Checked.__ctor` cannot deduce function from argument types `!()(Checked!(int, Throw))`, candidates are:
[...]/linux/bin64/../../src/phobos/std/experimental/checkedint.d(331):        
`__ctor(U)(U rhs)`
x.d(15): Error: template instance `x.foo!short` error instantiating
x.d(25):        instantiated from here: `bar!short`

$ dmd --version
DMD64 D Compiler v2.090.1
Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved written by Walter Bright

Is Checked expected to work with the types byte, char, ushort and short? If so shall I file a bug report?

Reply via email to