Template bug with second mixin?

Andre via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Dec 5 01:19:27 PST 2014


I think I mimized the coding too much.
What I actually want to achieve is to generate read methods
in the structure for different data types  (Ubyte, short, int):

I thought the eponymous trick would insert the content of the
enum instead the name itself?

string getReadMethods(string methodName, string dataType)
{
   return dataType~` `~methodName~`(size_t idx) {
     return v_arr[idx].get!`~dataType~`; }`;
}

template insertReadMethods(string MethodName, DataType)
{
   enum insertReadMethods = getReadMethods(MethodName, 
DataType.stringof);
}

struct Data
{
	mixin insertReadMethods!("readTinyInt", ubyte);
	mixin insertReadMethods!("readShortInt", short);
}

void main(){}


Kind regards
André

On Friday, 5 December 2014 at 07:28:26 UTC, ketmar via 
Digitalmars-d-learn wrote:
> On Fri, 05 Dec 2014 07:06:34 +0000
> Andre via Digitalmars-d-learn 
> <digitalmars-d-learn at puremagic.com> wrote:
>
>> Hi,
>> 
>> following coding fails to compile with 2.066.0 and
>> 2.067.0-b1.
>> 
>> 
>> This is a bug, or?
>> source\app.d(9): Error: mixin 
>> app.Data.insertReadMethods!("readTinyInt", ubyte)
>> is not defined
>> 
>> template insertReadMethods(string MethodName, DataType)
>> {
>> 	enum insertReadMethods = "";
>> }
>> 
>> struct Data
>> {
>> 	mixin insertReadMethods!("readTinyInt", ubyte);
>> 	mixin insertReadMethods!("readTinyInt", ubyte);
>> }
>> 
>> void main(){}
> i.e. "mixin template" inserts it's names into the same scope, 
> and
> compiler searching symbols from innermost scope up to module 
> scope.
>
> here first mixin inserts 'enum' member, and searching for 
> second mixin
> hits that enum member. to avoid things going out of control 
> compiler is
> not trying to guess what you want but stops with error, giving 
> you a
> chance to fix the code.



More information about the Digitalmars-d-learn mailing list