Hopefully, now I'm posting to the right place (instead of .announce like last time >_<).

Is there a way to make function tags and attributes optional? For example, C++ has noexcept tag that takes an optional bool that actually enables or desables the whole specifier. I find its uses in C++ somewhat painful due to clumsy template syntax, but the value is there.

I found a discussion from 2010 about doing something similar in D, but it doesn't seem to have went far, and I don't know if anything has been done in this direction.



In essence, here's what I mean:

import std.traits;

template isNoThrow(alias func) {
  enum bool isNoThrow = (functionAttributes!func & nothrow_) != 0;
}

void thisIsSoPolymorphic(T)(T t) nothrow(isNoThrow!(T.unsure)) {
  // ...
  t.unsure();
  // ...
}

Without this behavior, I basically have to either drop nothrow entirely (bummer), or make two functions enclosed in static if checks, which obviously blows up if I want to make more tags optional.

Reply via email to