On 09/11/2019 01:35 AM, berni wrote:
I'd like to write a template, that takes a different default value depending on the type of a variable.

Like this?

import std.stdio;

void main()
{
  double a = 1e-8;
  double b = 1e-10;
  float c = 1e-4;
  float d = 1e-6;

  assert(!test(a));
  assert(test(b));
  assert(!test(c));
  assert(test(d));
}

template DefaultFor(T) {
  static if (is (T == float)) {
    enum DefaultFor = 1e-5;

  } else static if (is (T == double)) {
    enum DefaultFor = 1e-9;

  } else {
    import std.string;
    static assert (false, format!"%s not supported"(T.stringof));
  }
}

auto test(T, U)(T value, U limit=DefaultFor!T)
{
  writefln!"%s: %s(%s)"(T.stringof, U.stringof, limit);
  return value<limit;
}

Ali

Reply via email to