[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