Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re^3: Name conflict between MinGW C++ standard library header and Perl development header

by syphilis (Archbishop)
on Nov 12, 2014 at 09:34 UTC ( [id://1106960]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Name conflict between MinGW C++ standard library header and Perl development header
in thread Name conflict between MinGW C++ standard library header and Perl development header

Why there's such big difference? I cannot understand it...

(Yeah ... sorry, not much point running Inline::C scripts when we're dealing with something that's specific to Inline::CPP ;-)

I don't grok C++, and I can only assume that in your simplified Inline::CPP script, the write() call in ostream has not been made visible. It's definite that 'write' has been defined to 'PerlLIO_write' - just try to use write() in your Inline::CPP script and you'll be able to verify:
use strict; use Inline 'CPP' => config => BUILD_NOISY => 1; foobar(); use Inline 'CPP' => <<'CODE'; #include <perl.h> // not needed - gets included automatically #include <iostream> void foobar() { std::cout << "foobar" << std::endl; } void break_me(SV * a, SV * b) { write(a, b); } CODE
That generates the error:
try_pl_dec5.xs:28:14: error: macro "PerlLIO_write" requires 3 argument +s, but only 2 given write(a, b);
In ostream, the write() declaration is preceded (next line up) by __ostream_type&. I don't know whether that puts aome sort of condition upon whether the function is visible or not.
Maybe if you include the same headers in the compilation of your Inline::CPP script as were used for the C++ script then things might start to add up correctly.

I know it's messy ... XS is like that, but you just have to work through it.

Cheers,
Rob

Replies are listed 'Best First'.
Re^4: Name conflict between MinGW C++ standard library header and Perl development header
by llancet (Friar) on Nov 13, 2014 at 09:48 UTC

    __ostream_type& is the return type of write() function. Nothing important.

    In C++, "&" is reference. You can just treat it as a sugar for pointers.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1106960]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (4)
As of 2024-03-28 22:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found