On Tuesday, 12 March 2013 at 13:44:35 UTC, Nick Sabalausky wrote:
On Tue, 12 Mar 2013 12:51:03 +0100
"TommiT" <tommitiss...@hotmail.com> wrote:

On Tuesday, 12 March 2013 at 02:39:06 UTC, TommiT wrote:
> struct S1 implements A2 {
>     void foo() { }
>     void bar() { }
> }

That's not good. Types shouldn't have to explicitly say that they implement a concept.

I *strongly* disagree. A much as I love ranges (for example), their
duckiness is the one thing I consider to be a huge mistake.

The problem with having to explicitl specify that a type implements a certain concept, is the resulting strong coupling between the concept definition and the type. This prevents "happy accidents" like the following from happening:

Alice and Bob write libraries without knowing anything about each other or each other's code. Alice implements the following in her library:

concept IntegerLike {
    ...
}

void foo(IntegerLike N)(N n) { }

Bob implements the following in his library:

struct SafeInt {
    ...
}

Later Bob realizes that Alice has written this cool function foo which accepts his type SafeInt as an argument because SafeInt just so happens to fulfill the requirements of the IntegerLike concept defined in Alice's library.

Although, the majority of concepts should come from the standard library.

Reply via email to