[OT] - C++ exceptions are becoming more and more problematic

rikki cattermole rikki at cattermole.co.nz
Thu Feb 24 07:23:34 UTC 2022


On 24/02/2022 6:05 PM, Walter Bright wrote:
> One of the requirements I proposed for Phobos2 was for it to not use 
> exceptions.

This is the sort of code we are going to end up with without a solution 
like value type exceptions. Explicit error types and returns ala 
@mustuse are not better than runtime exceptions, they are much worse for 
readability.

We need a better solution than this.

             if (isF || isLF) {
                 auto destinationr = destination.get!float("r"), 
destinationg = destination.get!float("g"),
                     destinationb = destination.get!float("b");
                 assert(destinationr, destinationr.error.toString());
                 assert(destinationg, destinationg.error.toString());
                 assert(destinationb, destinationb.error.toString());

                 destinationr = sourceR;
                 destinationg = sourceG;
                 destinationb = sourceB;
             } else if (isI8 || isLI8) {
                 auto destinationr = destination.get!ubyte("r"), 
destinationg = destination.get!ubyte("g"),
                     destinationb = destination.get!ubyte("b");
                 assert(destinationr, destinationr.error.toString());
                 assert(destinationg, destinationg.error.toString());
                 assert(destinationb, destinationb.error.toString());

                 destinationr = cast(ubyte)(sourceR * 255f);
                 destinationg = cast(ubyte)(sourceG * 255f);
                 destinationb = cast(ubyte)(sourceB * 255f);
             } else if (isI16 || isLI16) {
                 auto destinationr = destination.get!ushort("r"), 
destinationg = destination.get!ushort("g"),
                     destinationb = destination.get!ushort("b");
                 assert(destinationr, destinationr.error.toString());
                 assert(destinationg, destinationg.error.toString());
                 assert(destinationb, destinationb.error.toString());

                 destinationr = cast(ushort)(sourceR * 65535f);
                 destinationg = cast(ushort)(sourceG * 65535f);
                 destinationb = cast(ushort)(sourceB * 65535f);
             } else
                 assert(0);


More information about the Digitalmars-d mailing list