Retain struct when using alias this and passing using the alias..?

Tobias Pankrath tobias at pankrath.net
Sun Jun 24 08:10:26 PDT 2012


On Sunday, 24 June 2012 at 13:16:53 UTC, simendsjo wrote:
> import std.exception;
> import std.traits;
>
> struct Ranged(T, T min, T max) {
>     T _value = min;
>     typeof(this) opAssign(V : T)(V value) {
>         enforce(value >= min);
>         enforce(value <= max);
>         _value = value;
>         return this;
>     }
>     alias _value this;
> }
>
> void f(int i) {
>     i = 1000;
> }
>
> void g(T)(T i) if(isIntegral!T){
>     i = 1000;
> }
>
> void main() {
>     Ranged!(int, 10, 20) v;
>     v = 10; // ok
>     v = 20; // ok
>     f(v); // auch
>     g(v); // ok, exception
> }
>
> Is there a way to ensure the struct is used in f() without 
> using templates as in g()?

This should currently be impossible. The compiler would need to 
automatically promote f to a template function.



More information about the Digitalmars-d-learn mailing list