Conflicts with a libmpg123 typedef of the same name. Any chance we can rename the Juce one? It is MSVC specific in Juce anyway, and only appears in four other places:
Find all "ssize_t"
juce_core\native\juce_posix_SharedCode.h(439): ssize_t result = 0;
juce_core\native\juce_posix_SharedCode.h(503): ssize_t result = 0;
juce_core\streams\juce_InputStream.cpp(200): ssize_t numBytes
juce_core\streams\juce_InputStream.h(248): ssize_t maxNumBytesToRead
The juce one is inside the juce namespace… What’s the context in which it’s causing you trouble?
BTW it’s not MSVC-specific, but on other platforms it’s already defined in the system headers, that typedef is really just a fallback because MS don’t already provide it.
My source file includes mpg123.h and thats where I get the error, since a “using juce” namespace directive is in force.
1> DecoderMpg123.cpp
1>libmpg123\src\libmpg123\mpg123.h.in(1046): error C2872: 'ssize_t' : ambiguous symbol
1> could be 'D:\dev\trunk\libmpg123\ports\MSVC++\mpg123.h(14) : long ssize_t'
1> or 'd:\dev\trunk\juce\modules\juce_core\system\../maths/juce_MathsFunctions.h(95) : juce::ssize_t'
1>libmpg123\src\libmpg123\mpg123.h.in(1057): error C2872: 'ssize_t' : ambiguous symbol
1> could be 'D:\dev\trunk\libmpg123\ports\MSVC++\mpg123.h(14) : long ssize_t'
1> or 'd:\dev\trunk\juce\modules\juce_core\system\../maths/juce_MathsFunctions.h(95) : juce::ssize_t'
Having “using namespace juce” defined by default has been bothering me a bit recently, because it can lead to subtle annoyances like this. Can’t decide whether I should force people to declare it themselves if they want it, or not. Doing it that way would be a more modern c++ approach, but I’m afraid that if I released a build with it turned off, all the newbies would be bewildered by the fact that none of their code would compile any more…
I just remembered that this is MSVC specific on the libmpg123 side. Actually I personally added that typedef for MSVC. I could change it in libmpg123, at least guard it with a #ifndef.
We just need to make sure that pointer_sized_int is compatible to the current typedef of ssize_t in libmpg123 which is long. Juce defines pointer_sized_int differently depending on the plattform and 32/64 bit:
[quote]#elif JUCE_MSVC
/** A signed integer type that’s guaranteed to be large enough to hold a pointer without truncating it. /
typedef _W64 int pointer_sized_int;
/* An unsigned integer type that’s guaranteed to be large enough to hold a pointer without truncating it. /
typedef _W64 unsigned int pointer_sized_uint; #else
/* A signed integer type that’s guaranteed to be large enough to hold a pointer without truncating it. /
typedef int pointer_sized_int;
/* An unsigned integer type that’s guaranteed to be large enough to hold a pointer without truncating it. */
typedef unsigned int pointer_sized_uint; #endif[/quote]
These look compatible to long to me. So I could simply add an #ifndef to the libmpg123 typedef.
See, in my project juce.h is included by a file that is included first in every .cpp file. Its part of the precompile too. So there is no convenient way for me to include the mpg123 header before Juce.