On Friday, 28 April 2017 at 17:57:34 UTC, Ali Çehreli wrote:
On 04/28/2017 08:56 AM, ParticlePeter wrote:
> C++ Function:
> bool cppFunc( float[3] color );
>
> D binding:
> extern(C++) bool cppFunc( float[3] color );
>
> Using with:
> float[3] my_color;
> cppFunc( my_color );
>
> -> Error: Internal Compiler Error: unable to pass static
array to
That part is a bug at least in the compiler message. Is it
really an internal ctompiler error? Doesn't look like it: the
compiler is talking to us happily. :)
My simple test works for me:
// deneme.cpp
float cppFunc(float color[3]) {
return color[0] + color[1] + color[2];
}
$ g++ -c deneme.cpp -o deneme_cpp.o
// deneme.d
extern(C++) float cppFunc(float * color);
void main() {
float[3] my_color = [ 1.5, 2.5, 3.5 ] ;
assert(cppFunc(my_color.ptr) == 7.5);
}
$ dmd deneme_cpp.o deneme.d -of=deneme
Builds and runs fine... on Linux... I don't know whether that's
significant.
Ali
Interesting, your example corresponds to my third case, the
linker error. I am on Window, building an x64 App, afaik in that
case the MS Visual Studio linker is used instead of optilink.
Will add your findings to the bug report.