digitalmars.D.learn - What is the proper way to handle pointers in variable arguments list?
- Tyro[17] (22/22) Oct 28 2012 The following fails because the compiler assumes I am trying to
- Dmitry Olshansky (5/27) Oct 28 2012 Well, first things first:
- Tyro[17] (5/35) Oct 28 2012 Changing it to static allows compilation, however I get the following
- Simen Kjaeraas (6/43) Oct 28 2012 I assume you've actually initialized the pointers to something?
- Tyro[17] (4/48) Oct 28 2012 Wow, so obvious yet so obviously overlooked... *banging my head on the
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
Oct 28 2012
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; } } } ThanksWell, first things first: if ---> static if -- Dmitry Olshansky
Oct 28 2012
On 10/28/12 4:44 PM, Dmitry Olshansky wrote:On 29-Oct-12 00:36, Tyro[17] wrote: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.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; } } } ThanksWell, first things first: if ---> static if
Oct 28 2012
On 2012-08-28 22:10, Tyro[17] <nospam home.com> wrote:On 10/28/12 4:44 PM, Dmitry Olshansky wrote: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. -- SimenOn 29-Oct-12 00:36, Tyro[17] wrote: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.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; } } } ThanksWell, first things first: if ---> static if
Oct 28 2012
On 10/28/12 5:16 PM, Simen Kjaeraas wrote:On 2012-08-28 22:10, Tyro[17] <nospam home.com> wrote:Wow, so obvious yet so obviously overlooked... *banging my head on the monitor* ThanksOn 10/28/12 4:44 PM, Dmitry Olshansky wrote: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.On 29-Oct-12 00:36, Tyro[17] wrote: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.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; } } } ThanksWell, first things first: if ---> static if
Oct 28 2012