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:


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

Reply via email to