The issue is located to perl.h, not XSUB.h:
#include "perl.h"
#include <iostream>
int main()
{
std::cout << "foo" << std::endl;
}
and compile with:
D:\mydoc\projects\GenoEye-0.4.5-build\perl>g++ -ID:/gtk+-2.24.10/inclu
+de/cairo -ID:/gtk+-2.24.10/include/glib-2.0 -ID:/gtk+-2.24.10/
lib/glib-2.0/include -ID:/gtk+-2.24.10/include -ID:/gtk+-2.24.10/inclu
+de/freetype2 -ID:/gtk+-2.24.10/include/libpng14 -ID:/mydoc/pro
jects/GenoEye-0.4.5-Source/src -ID:/mydoc/projects/GenoEye-0.4.5-build
+/src -ID:/mydoc/projects/GenoEye-0.4.5-Source -ID:/Strawberry-
5.20.1.1-ia32/perl/lib/CORE -ID:/mydoc/projects/GenoEye-0.4.5-Source/p
+erl -g -o test.exe test.cpp
it will reproduce this issue. Also, add #undef write before #include <iostream> won't help.
However, this conflict do not reproduce if I use Inline::CPP. The code below works well:
use strict;
use Inline 'CPP' => config =>
BUILD_NOISY => 1,
INC => '-ID:/mydoc/projects/GenoEye-0.4.5-Source/src -ID:/mydoc/p
+rojects/GenoEye-0.4.5-Source/perl -ID:/gtk+-2.24.10/include/cairo';
foobar();
use Inline 'CPP' => <<'CODE';
#include <perl.h>
#include <iostream>
void foobar() {
std::cout << "foobar" << std::endl;
}
CODE
Why there's such big difference? I cannot understand it...