C++ guys hate static_if?
bearophile
bearophileHUGS at lycos.com
Thu Mar 14 16:11:46 PDT 2013
H. S. Teoh:
> What if templates were modified so that assumptions about T
> have to be
> stated up front? We don't necessarily have to introduce
> typeclasses as a
> separate thing, but we could have the compiler reject template
> bodies
> that try to access internals of T that aren't stated up front.
> E.g.:
>
> auto myFunc(T)(T t) {
> return t.fun(); // error: T wasn't stated to have a member
> named .fun
> }
>
> would produce a compile error, whereas:
>
> auto myFunc(T)(T t)
> if (hasMember!(T, "fun"))
> {
> return t.fun(); // OK: we stated that we expect T to have a
> .fun member
> }
>
> would be accepted. The stated assumptions can themselves be
> templates
> too, which are expanded by the compiler before checking the
> template
> body. (Presumably, hasMember will eventually expand to some
> compiler
> intrinsic that tells the compiler what assumptions are being
> made about
> T.) So we can still continue using things like isInputRange!T,
> etc.,
> except that now the compiler will catch unstated assumptions.
What's the difference between this and Concepts (lite)? :-)
Bye,
bearophile
More information about the Digitalmars-d
mailing list