[BUG] juce::ssize_t not being defined on POSIX

I’m subclassing juce::InputStream, but i get an error on windows:

size_t readIntoMemoryBlock (juce::MemoryBlock& destBlock,
                            ssize_t maxNumBytesToRead) override

because ssize_t being a POSIX only extension. Then JUCE got this in MathFunctions, because why not:

#if JUCE_WINDOWS && ! JUCE_MINGW
  using ssize_t = pointer_sized_int;
#endif

The problem is, if i declare the method like this:

size_t readIntoMemoryBlock (juce::MemoryBlock& destBlock,
                            juce::ssize_t maxNumBytesToRead) override

Now things won’t compile on posix, because the alias in the juce namespace isn’t defined.
Should that parameter be a std::ptrdiff_t to be compatible with C++ on all platforms ?

As a general suggestion, never alias standard types exposed to public interfaces into your own namespace.

2 Likes

Found also this related old message with no replies

Are you using CMake or the Projucer to set the build up?

My Projucer generated build simply doesn’t run.
However, my CMake generated build works fine.