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