Thread overview | ||||||
---|---|---|---|---|---|---|
|
March 11, 2006 Is this is bug or not? | ||||
---|---|---|---|---|
| ||||
Hi all, Here is a snipet: import std.stdio; struct A(T, T x0) { T x = x0; } int main(char[][] args) { alias A!(int, 8) Ai; // test.d(11) Ai ai; writefln(ai.x); return 0; } DMD output is: test.d(11): template instance A!(int,8) does not match any template declaration However snipet: import std.stdio; struct A(T, int x0) // note int instead of T { T x = x0; } int main(char[][] args) { alias A!(int, 8) Ai; Ai ai; writefln(ai.x); return 0; } works as expected. Is former is a templates issue or bug? -- Victor Nakoryakov (aka nail) nail-mail[at]mail.ru Krasnoznamensk, Moscow, Russia |
March 15, 2006 Re: Is this is bug or not? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Victor Nakoryakov Attachments: | Victor Nakoryakov schrieb am 2006-03-11: > Hi all, > > Here is a snipet: > > import std.stdio; > > struct A(T, T x0) > { > T x = x0; > } > > int main(char[][] args) > { > alias A!(int, 8) Ai; // test.d(11) > Ai ai; > writefln(ai.x); > return 0; > } > > DMD output is: > test.d(11): template instance A!(int,8) does not match any template declaration > > However snipet: > > import std.stdio; > > struct A(T, int x0) // note int instead of T > { > T x = x0; > } > > int main(char[][] args) > { > alias A!(int, 8) Ai; > Ai ai; > writefln(ai.x); > return 0; > } > > works as expected. Is former is a templates issue or bug? Added to DStress as http://dstress.kuehne.cn/run/t/template_31_A.d http://dstress.kuehne.cn/run/t/template_31_B.d http://dstress.kuehne.cn/run/t/template_31_C.d http://dstress.kuehne.cn/run/t/template_31_D.d template_31_C seems funny, but I'm not aware of any statement against it. Thomas |
March 17, 2006 Re: Is this is bug or not? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Thomas Kuehne | Thomas Kuehne wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Victor Nakoryakov schrieb am 2006-03-11:
>> Hi all,
>>
>> Here is a snipet:
>>
>> import std.stdio;
>>
>> struct A(T, T x0)
>> {
>> T x = x0;
>> }
>>
>> int main(char[][] args)
>> {
>> alias A!(int, 8) Ai; // test.d(11)
>> Ai ai;
>> writefln(ai.x);
>> return 0;
>> }
If that had worked, it would have been a new feature. You're obtaining a type AND a value! Note that value parameters only work for basic types and char[]. It would be very cool, though -- it would enable a lot of code reuse for metaprogramming.
For example, pow!(real z, int n) and pow!(creal z, int n) would be able to share a common implementation. The fact that they can't has been bugging me for some time.
|
March 17, 2006 Re: Is this is bug or not? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Don Clugston | Don Clugston wrote: > Thomas Kuehne wrote: >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA1 >> >> Victor Nakoryakov schrieb am 2006-03-11: >>> Hi all, >>> >>> Here is a snipet: >>> >>> import std.stdio; >>> >>> struct A(T, T x0) >>> { >>> T x = x0; >>> } >>> >>> int main(char[][] args) >>> { >>> alias A!(int, 8) Ai; // test.d(11) >>> Ai ai; >>> writefln(ai.x); >>> return 0; >>> } > > If that had worked, it would have been a new feature. You're obtaining a type AND a value! Note that value parameters only work for basic types and char[]. It would be very cool, though -- it would enable a lot of code reuse for metaprogramming. > > For example, pow!(real z, int n) and pow!(creal z, int n) would be able to share a common implementation. The fact that they can't has been bugging me for some time. For what it's worth, this is legal in C++: #include <iostream> template<class T, T x> struct S { static const T val = x; }; int main() { int x = S<int,5>::val; std::cout << x << '\n'; } Sean |
Copyright © 1999-2021 by the D Language Foundation