On Sunday, 1 June 2014 at 16:02:47 UTC, bioinfornatics wrote:
DMD (dmdfe 2.066) fail when i use UDA which store a delegate
code below works if i remove @section UDA otheswise it give this
error:
dmd: statement.c:714: ErrorStatement::ErrorStatement():
Assertion
`global.gaggedErrors || global.errors' failed.
is a bug ?
--- CODE also on dpaste http://dpaste.dzfl.pl/3a3d660bd3bc
import std.stdio;
import std.typecons : Tuple;
import std.typetuple : Filter;
struct attribute{}
@attribute
struct section( alias start, alias end)
{
alias checkStart = start;
alias checkEnd = end;
}
template hasSection(T)
{
static bool helper()
{
foreach(memberName; __traits(allMembers, T))
{
foreach(attr; __traits(getAttributes,
__traits(getMember, T, memberName)))
{
static if(is(attr == Section))
return true;
}
}
return false;
}
enum hasSection = helper();
}
struct Data{
@section!( ( words ) = words[0] == '@' ,
(
words ) = words[0] == '\n' )
string a;
@section!( ( words ) = words[0] 63 words[0] 115 ,
(
words ) = words[0] == '\n' )
string b;
@section!( ( words ) = words[0] == '+' ,
(
words ) = words[0] == '\n' )
string c;
}
template toTuple(T){
static string maker(){
string statement = alias toTuple = Tuple!(;
foreach(const memberName; __traits(allMembers, T)){
//~ mixin(`alias f = Filter!(hasSection,
__traits(getAttributes, T.` ~ memberName ~ `));`);
statement ~= typeof(__traits(getMember, T,
memberName)).stringof ~ ,\ ~ memberName ~ \, ;
}
statement = statement[0..$-2] ~ ) ; ; // $-2 to
remove
extra comma
return statement;
}
mixin( maker() );
}
void main()
{
alias A = toTuple!Data;
A a;
a[0] = 1;
a.x = 1;
}
ok it seem problem from my code a type string i need to
understand why