Thread overview
Duration at runtime
Feb 19, 2016
Zekereth
Feb 19, 2016
Adam D. Ruppe
Feb 19, 2016
Zekereth
Feb 19, 2016
Zekereth
February 19, 2016
I'm confused by the following:

import std.stdio;
import std.datetime;

void main()
{
	string unitType = "seconds";
	auto seconds = 1;
//	auto myDur = dur!(unitType)(seconds); // Error unitType can't be read at compile time.
	auto myDur = dur!("seconds")(seconds); // Compiles why?
}

How is seconds able to be read at compile time but unitType cannot?

Thanks!
February 19, 2016
On Friday, 19 February 2016 at 04:08:02 UTC, Zekereth wrote:
> How is seconds able to be read at compile time but unitType cannot?

"seconds" is a literal value that the compiler knows about. unitType is a variable that might change between its declaration and use (it doesn't here, but the compiler doesn't check if it actually does, just if it *can*), so the compiler doesn't allow it.

February 19, 2016
On Friday, 19 February 2016 at 04:16:23 UTC, Adam D. Ruppe wrote:
> On Friday, 19 February 2016 at 04:08:02 UTC, Zekereth wrote:
>> How is seconds able to be read at compile time but unitType cannot?
>
> "seconds" is a literal value that the compiler knows about. unitType is a variable that might change between its declaration and use (it doesn't here, but the compiler doesn't check if it actually does, just if it *can*), so the compiler doesn't allow it.

Thanks a lot Adam!

So is there a way around this?. I want duration to be configurable at runtime.
February 19, 2016
On Friday, 19 February 2016 at 04:21:43 UTC, Zekereth wrote:
> On Friday, 19 February 2016 at 04:16:23 UTC, Adam D. Ruppe wrote:
>> On Friday, 19 February 2016 at 04:08:02 UTC, Zekereth wrote:
>>> How is seconds able to be read at compile time but unitType cannot?
>>
>> "seconds" is a literal value that the compiler knows about. unitType is a variable that might change between its declaration and use (it doesn't here, but the compiler doesn't check if it actually does, just if it *can*), so the compiler doesn't allow it.
>
> Thanks a lot Adam!
>
> So is there a way around this?. I want duration to be configurable at runtime.

Never mind I found a better solution to my problem by storing a Duration instead of the unitType. Works just fine.

Thanks a lot I appreciate your help!
February 19, 2016
On 2/18/16 11:36 PM, Zekereth wrote:
> On Friday, 19 February 2016 at 04:21:43 UTC, Zekereth wrote:
>> On Friday, 19 February 2016 at 04:16:23 UTC, Adam D. Ruppe wrote:
>>> On Friday, 19 February 2016 at 04:08:02 UTC, Zekereth wrote:
>>>> How is seconds able to be read at compile time but unitType cannot?
>>>
>>> "seconds" is a literal value that the compiler knows about. unitType
>>> is a variable that might change between its declaration and use (it
>>> doesn't here, but the compiler doesn't check if it actually does,
>>> just if it *can*), so the compiler doesn't allow it.
>>
>> Thanks a lot Adam!
>>
>> So is there a way around this?. I want duration to be configurable at
>> runtime.
>
> Never mind I found a better solution to my problem by storing a Duration
> instead of the unitType. Works just fine.
>
> Thanks a lot I appreciate your help!

Because it might help with some future issue:

Instead of auto, declare the unitType as immutable or enum:

immutable unitType = "seconds";
enum unitType = "seconds";

Then the compiler knows it won't change.

-Steve