On Wed, Jul 23, 2014 at 04:46:20PM +0200, bossfong via Digitalmars-d-learn 
wrote:
> Am 23.07.2014 16:27, schrieb H. S. Teoh via Digitalmars-d-learn:
> >
> >We could, though it's not quite the same as a native concepts
> >implementation where the compiler can check templates for code that
> >wrongly makes assumptions about the incoming type that aren't defined by
> >the concept.
> >
> >
> >T
> >
> true.
> 
> Still, maybe compiler errors could be provided by a library that
> defines an "Concept(Interface)" UDA that you could use to annotate
> implementations of "Concepts"?
> 
> import concepts;
> 
> @Concept(InputRange)
> struct MyInputRange
> {
> // ...
> }
> 
> verifyConcepts();
> 
> Is it that what you mean?
> 
> Just thinking things through here...

No, I'm talking about catching errors like this:

        auto myRangeAlgo(R)(R range)
                if (isInputRange!R)
        {
                ...
                auto r = range.save;    // <--- oops
                ...
                return Result(...);
        }

        unittest
        {
                auto testData = [1,2,3];
                auto result = myRangeAlgo(testData);

                // Test will pass, because arrays are also forward
                // ranges, which have a .save method. So we fail to
                // catch the bug in the code above.
                assert(result.equal(expectedResults));
        }


T

-- 
Bomb technician: If I'm running, try to keep up.

Reply via email to