Re: How to use core.vararg to print D variadic arguments and their types without using ! (template instantiation)?

2023-09-18 Thread BoQsc via Digitalmars-d-learn


Note that this doesn't work in gdc.

The templated version is actually more akin to what C does.


Yeah it does not seem to work in gdc when tested using 
https://d.godbolt.org/


The errors produced:

```
:11:12: error: none of the overloads of template 
'core.stdc.stdarg.va_arg' are callable using argument types 
'!()(__va_list_tag[1], TypeInfo, int*)'

   11 |  va_arg(_argptr, typeid(i), );
  |^
/opt/compiler-explorer/gcc-trunk-20230917/lib/gcc/x86_64-linux-gnu/14.0.0/include/d/core/stdc/stdarg.d:179:7:
 note: Candidates are: 'va_arg(T)(ref va_list ap)'
  179 | T va_arg(T)(ref va_list ap); // intrinsic
  |   ^
/opt/compiler-explorer/gcc-trunk-20230917/lib/gcc/x86_64-linux-gnu/14.0.0/include/d/core/stdc/stdarg.d:291:10:
 note: 'va_arg(T)(ref va_list ap, ref T parmn)'
  291 | void va_arg(T)(ref va_list ap, ref T parmn); // 
intrinsic

  |  ^
:14:12: error: none of the overloads of template 
'core.stdc.stdarg.va_arg' are callable using argument types 
'!()(__va_list_tag[1], TypeInfo, double*)'

   14 |  va_arg(_argptr, typeid(d), );
  |^
/opt/compiler-explorer/gcc-trunk-20230917/lib/gcc/x86_64-linux-gnu/14.0.0/include/d/core/stdc/stdarg.d:179:7:
 note: Candidates are: 'va_arg(T)(ref va_list ap)'
  179 | T va_arg(T)(ref va_list ap); // intrinsic
  |   ^
/opt/compiler-explorer/gcc-trunk-20230917/lib/gcc/x86_64-linux-gnu/14.0.0/include/d/core/stdc/stdarg.d:291:10:
 note: 'va_arg(T)(ref va_list ap, ref T parmn)'
  291 | void va_arg(T)(ref va_list ap, ref T parmn); // 
intrinsic

  |  ^
ASM generation compiler returned: 1
:11:12: error: none of the overloads of template 
'core.stdc.stdarg.va_arg' are callable using argument types 
'!()(__va_list_tag[1], TypeInfo, int*)'

   11 |  va_arg(_argptr, typeid(i), );
  |^
/opt/compiler-explorer/gcc-trunk-20230918/lib/gcc/x86_64-linux-gnu/14.0.0/include/d/core/stdc/stdarg.d:179:7:
 note: Candidates are: 'va_arg(T)(ref va_list ap)'
  179 | T va_arg(T)(ref va_list ap); // intrinsic
  |   ^
/opt/compiler-explorer/gcc-trunk-20230918/lib/gcc/x86_64-linux-gnu/14.0.0/include/d/core/stdc/stdarg.d:291:10:
 note: 'va_arg(T)(ref va_list ap, ref T parmn)'
  291 | void va_arg(T)(ref va_list ap, ref T parmn); // 
intrinsic

  |  ^
:14:12: error: none of the overloads of template 
'core.stdc.stdarg.va_arg' are callable using argument types 
'!()(__va_list_tag[1], TypeInfo, double*)'

   14 |  va_arg(_argptr, typeid(d), );
  |^
/opt/compiler-explorer/gcc-trunk-20230918/lib/gcc/x86_64-linux-gnu/14.0.0/include/d/core/stdc/stdarg.d:179:7:
 note: Candidates are: 'va_arg(T)(ref va_list ap)'
  179 | T va_arg(T)(ref va_list ap); // intrinsic
  |   ^
/opt/compiler-explorer/gcc-trunk-20230918/lib/gcc/x86_64-linux-gnu/14.0.0/include/d/core/stdc/stdarg.d:291:10:
 note: 'va_arg(T)(ref va_list ap, ref T parmn)'
  291 | void va_arg(T)(ref va_list ap, ref T parmn); // 
intrinsic

  |  ^
Execution build compiler returned: 1
```


Re: How to use core.vararg to print D variadic arguments and their types without using ! (template instantiation)?

2023-09-16 Thread Steven Schveighoffer via Digitalmars-d-learn

On 9/15/23 4:14 PM, Basile B. wrote:

On Thursday, 14 September 2023 at 15:19:29 UTC, BoQsc wrote:

https://dlang.org/phobos/core_vararg.html

The common way to use **va_arg** is `va_arg!(int)(_argptr);`
What would be the alternative way or syntax that behave exactly the 
same way, even if more verbose?





`va_arg!(int)(_argptr);` is taken from an example in:
https://dlang.org/spec/function.html#d_style_variadic_functions


here's how

```d
import core.vararg;

void main()
{
     foo(.5, 5);
}

void foo(...)
{
     int i = void;
     va_arg(_argptr, typeid(i), );
     assert(i == 5);
     double d = void;
     va_arg(_argptr, typeid(d), );
     assert(d == .5);
}
```


Note that this doesn't work in gdc.

The templated version is actually more akin to what C does.

-Steve


Re: How to use core.vararg to print D variadic arguments and their types without using ! (template instantiation)?

2023-09-15 Thread Basile B. via Digitalmars-d-learn

On Thursday, 14 September 2023 at 15:19:29 UTC, BoQsc wrote:

https://dlang.org/phobos/core_vararg.html

The common way to use **va_arg** is `va_arg!(int)(_argptr);`
What would be the alternative way or syntax that behave exactly 
the same way, even if more verbose?





`va_arg!(int)(_argptr);` is taken from an example in:
https://dlang.org/spec/function.html#d_style_variadic_functions


here's how

```d
import core.vararg;

void main()
{
foo(.5, 5);
}

void foo(...)
{
int i = void;
va_arg(_argptr, typeid(i), );
assert(i == 5);
double d = void;
va_arg(_argptr, typeid(d), );
assert(d == .5);
}
```


How to use core.vararg to print D variadic arguments and their types without using ! (template instantiation)?

2023-09-14 Thread BoQsc via Digitalmars-d-learn

https://dlang.org/phobos/core_vararg.html

The common way to use **va_arg** is `va_arg!(int)(_argptr);`
What would be the alternative way or syntax that behave exactly 
the same way, even if more verbose?





`va_arg!(int)(_argptr);` is taken from an example in:
https://dlang.org/spec/function.html#d_style_variadic_functions