concepts v0.0.1
Jacob Carlborg via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Sat Dec 17 06:58:24 PST 2016
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
More information about the Digitalmars-d-announce
mailing list