On 2016-12-16 21:51, Atila Neves wrote:
Since my phobos PR for better static assertions was clearly never
getting merged (https://github.com/dlang/phobos/pull/3677), I moved the
code to dub instead:
http://code.dlang.org/packages/concepts
Basically, as long as you pair up your template constraints (e.g. isFoo)
with a suitably named function that should compile (e.g. checkFoo, not a
lambda), then you can write this:
@models!(Foo, isFoo)
struct Foo {
//...
}
And in the case that isFoo is false, you'll get to know _why_ it didn't
compile instead of an AssertError that leaves you confused.
At least it used to and the unit tests pass so I'm assuming it still
does :P
It's not very well tested ;). When a check fails I get this error:
Error: can only import from a module, not from package
std.algorithm.searching.countUntil
After fixing that to a proper selective import I get:
Error: template instance moduleName!P template 'moduleName' is not defined
Adding an import for std.traits will fix that. Then after fixing all
that it seems to work properly :)
Asserting that something does not compile is very risky because it does
not tell you why it didn't compile. One should always first compile
without __traits(compiles) to verify that the correct error is reported.
--
/Jacob Carlborg