Template method and type resolution of return type
bearophile via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Apr 19 10:49:53 PDT 2014
matovitch:
> struct Test
> {
> immutable (ubyte)[] data;
>
> T get(T)()
> {
> return *(cast(T*)(&(data[0])));
> }
It's better to return const/immutable data. Otherwise the program
gives undefined results. In alternative use mutable ubytes for
data.
Also &data[0] is probably data.ptr.
> This won't compile :
>
> import std.stdio;
>
> void main()
> {
> Test t;
> t.data = [152, 32, 64, 28, 95];
> float b = t.get;
> writefln("%s", b);
D doesn't perform inference on the return type.
> This neither:
>...
> Test t;
> t.data = [152, 32, 64, 28, 95];
> float b = t.get!(typeof(b));
> writefln("%s", b);
I don't know. Perhaps b is not yet defined. This in theory could
work.
> In fact this would allow a nicer syntax for the Json struct in
> vibe.d for example.
I don't think in future D will behave differently on this code.
Bye,
bearophile
More information about the Digitalmars-d-learn
mailing list