View source code
Display the source code in std/digest/package.d from which thispage was generated on github.
Report a bug
If you spot a problem with this page, click here to create aBugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.Requires a signed-in GitHub account. This works well for small changes.If you'd like to make larger changes you may want to consider usinglocal clone.

Enum member std.digest.isDigest

Use this to check if a type is a digest. See ExampleDigest to see what a type must provide to pass this check.

enum isDigest(T) = isOutputRange!(T, const(ubyte)[]) && isOutputRange!(T, ubyte) && is(T == struct) && is(typeof(() { T dig = void; dig.put(cast(ubyte)0, cast(ubyte)0); dig.start(); auto value = dig.finish(); } ));

Note

This is very useful as a template constraint (see examples)

BUGS

  • Does not yet verify that put takes scope parameters.
  • Should check that finish() returns a ubyte[num] array

Example

import std.digest.crc;
static assert(isDigest!CRC32);

Example

import std.digest.crc;
void myFunction(T)()
if (isDigest!T)
{
    T dig;
    dig.start();
    auto result = dig.finish();
}
myFunction!CRC32();

Authors

Johannes Pfau

License

Boost License 1.0.