www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - What is wrong here? Error: cannot cast int to SYSTEMTIME

reply Spacen Jasset <spacenjasset yahoo.co.uk> writes:
Digital Mars D Compiler v1.015

Neither of these lines will compile and give: Error: cannot cast int to 
SYSTEMTIME

without a line number. How might I get this to work?


import std.date;

//long utc_time1 = std.date.getUTCtime();

void main()
{
	//static long utc_time1 = std.date.getUTCtime();
}

Regards,
Jason
Oct 23 2007
next sibling parent reply BCS <ao pathlink.com> writes:
Reply to Spacen,

 Digital Mars D Compiler v1.015
 
 Neither of these lines will compile and give: Error: cannot cast int
 to SYSTEMTIME
 
 without a line number. How might I get this to work?
 
 import std.date;
 
 //long utc_time1 = std.date.getUTCtime();
 
 void main()
 {
 //static long utc_time1 = std.date.getUTCtime();
 }
 Regards,
 Jason

For the first line, do this: utc_time1 = std.date.getUTCtime(); static this(){long utc_time1 = std.date.getUTCtime();} For the second drop the static (if it isn't actualy in main, you will have to do somthing else) The issue is that D doesn't allow runtime initializers for non stack variables. For the static function variable one you might be able to get away with this: template T(char[] str, A...) { long v; static this(){v = mixin(str);} } void fn() { alias T!("std.date.getUTCtime()", __FILE__, __LINE__).v utc_time1; } there will be one version of T!(...).v for each distinct "...". Note, if you put this in a templated function, make sure you put pass on the template args or things get strange.
Oct 23 2007
parent reply Spacen Jasset <spacenjassset yahoo.co.uk> writes:
BCS wrote:
 Reply to Spacen,
 
 Digital Mars D Compiler v1.015

 Neither of these lines will compile and give: Error: cannot cast int
 to SYSTEMTIME

 without a line number. How might I get this to work?

 import std.date;

 //long utc_time1 = std.date.getUTCtime();

 void main()
 {
 //static long utc_time1 = std.date.getUTCtime();
 }
 Regards,
 Jason

For the first line, do this: utc_time1 = std.date.getUTCtime(); static this(){long utc_time1 = std.date.getUTCtime();} For the second drop the static (if it isn't actualy in main, you will have to do somthing else) The issue is that D doesn't allow runtime initializers for non stack variables. For the static function variable one you might be able to get away with this: template T(char[] str, A...) { long v; static this(){v = mixin(str);} } void fn() { alias T!("std.date.getUTCtime()", __FILE__, __LINE__).v utc_time1; } there will be one version of T!(...).v for each distinct "...". Note, if you put this in a templated function, make sure you put pass on the template args or things get strange.

that manner was for testing. Presumably the way is to create a class and use objects. Thanks for the assistance.
Oct 23 2007
parent BCS <ao pathlink.com> writes:
Reply to Spacen,

 BCS wrote:
 
 For the first line, do this:
 
 utc_time1 = std.date.getUTCtime();
 static this(){long utc_time1 = std.date.getUTCtime();}
 For the second drop the static (if it isn't actualy in main, you will
 have to do somthing else)
 
 The issue is that D doesn't allow runtime initializers for non stack
 variables.
 

Ah ok. I need to read up on this. The code I was intending to use in that manner was for testing. Presumably the way is to create a class and use objects.

What do objects have to do with it? I might not be understanding what you want to do.
 Thanks for the assistance.
 

Oct 23 2007
prev sibling parent "Steven Schveighoffer" <schveiguy yahoo.com> writes:
I have seen this error before.  It was a bug in the compiler 
(http://d.puremagic.com/issues/show_bug.cgi?id=1300).  Try upgrading to 
latest, I have dmd 1.021 (1.019 fixed this bug).

Once you do upgrade, you will find that you get a much more descriptive 
error, because BCS is right, static initializers must be evaluated at 
compile time.  Follow his instructions to get it working how you want.

-Steve

"Spacen Jasset" wrote
 Digital Mars D Compiler v1.015

 Neither of these lines will compile and give: Error: cannot cast int to 
 SYSTEMTIME

 without a line number. How might I get this to work?


 import std.date;

 //long utc_time1 = std.date.getUTCtime();

 void main()
 {
 //static long utc_time1 = std.date.getUTCtime();
 }

 Regards,
 Jason 

Oct 23 2007