Re: What is the proper way to handle pointers in variable arguments list?

2012-10-28 Thread Tyro[17]

On 10/28/12 5:16 PM, Simen Kjaeraas wrote:

On 2012-08-28 22:10, Tyro[17]  wrote:


On 10/28/12 4:44 PM, Dmitry Olshansky wrote:

On 29-Oct-12 00:36, Tyro[17] wrote:

The following fails because the compiler assumes I am trying to
dereference non-pointer variables. Can this be done?

void main()
{
 int i;
 int* pi;
 double d;
 double* pd;
 char c;
 char* pc;

 scan(i, pi, d, pd, c, pc);
}

void scan(A...)(ref A data)
{
 import std.traits;
 foreach (element; data) {
 if(isPointer!(typeof(element)) &&
isIntegral!(typeof(*element))) {
 *element = 10;
 }
 }
}

Thanks


Well, first things first:
if ---> static if



Changing it to static allows compilation, however I get the following
runtime error:

 "Segmentation fault: 11"

This happens whether I try to read from *element or modify it.


I assume you've actually initialized the pointers to something?

Given the above code, all the pointers point to null, and a segfault
would be a reasonable reaction.



Wow, so obvious yet so obviously overlooked... *banging my head on the 
monitor*


Thanks


Re: What is the proper way to handle pointers in variable arguments list?

2012-10-28 Thread Simen Kjaeraas

On 2012-08-28 22:10, Tyro[17]  wrote:


On 10/28/12 4:44 PM, Dmitry Olshansky wrote:

On 29-Oct-12 00:36, Tyro[17] wrote:

The following fails because the compiler assumes I am trying to
dereference non-pointer variables. Can this be done?

void main()
{
 int i;
 int* pi;
 double d;
 double* pd;
 char c;
 char* pc;

 scan(i, pi, d, pd, c, pc);
}

void scan(A...)(ref A data)
{
 import std.traits;
 foreach (element; data) {
 if(isPointer!(typeof(element)) &&
isIntegral!(typeof(*element))) {
 *element = 10;
 }
 }
}

Thanks


Well, first things first:
if ---> static if



Changing it to static allows compilation, however I get the following  
runtime error:


 "Segmentation fault: 11"

This happens whether I try to read from *element or modify it.


I assume you've actually initialized the pointers to something?

Given the above code, all the pointers point to null, and a segfault
would be a reasonable reaction.

--
Simen


Re: What is the proper way to handle pointers in variable arguments list?

2012-10-28 Thread Tyro[17]

On 10/28/12 4:44 PM, Dmitry Olshansky wrote:

On 29-Oct-12 00:36, Tyro[17] wrote:

The following fails because the compiler assumes I am trying to
dereference non-pointer variables. Can this be done?

void main()
{
 int i;
 int* pi;
 double d;
 double* pd;
 char c;
 char* pc;

 scan(i, pi, d, pd, c, pc);
}

void scan(A...)(ref A data)
{
 import std.traits;
 foreach (element; data) {
 if(isPointer!(typeof(element)) &&
isIntegral!(typeof(*element))) {
 *element = 10;
 }
 }
}

Thanks


Well, first things first:
if ---> static if



Changing it to static allows compilation, however I get the following 
runtime error:


"Segmentation fault: 11"

This happens whether I try to read from *element or modify it.


Re: What is the proper way to handle pointers in variable arguments list?

2012-10-28 Thread Dmitry Olshansky

On 29-Oct-12 00:36, Tyro[17] wrote:

The following fails because the compiler assumes I am trying to
dereference non-pointer variables. Can this be done?

void main()
{
 int i;
 int* pi;
 double d;
 double* pd;
 char c;
 char* pc;

 scan(i, pi, d, pd, c, pc);
}

void scan(A...)(ref A data)
{
 import std.traits;
 foreach (element; data) {
 if(isPointer!(typeof(element)) && isIntegral!(typeof(*element))) {
 *element = 10;
 }
 }
}

Thanks


Well, first things first:
if ---> static if

--
Dmitry Olshansky