Hi Chris,
Documentation states that shmem should compile on this platform but,
I've discovered an interesting error with char_traits. In all shmem
streams, I have problems with the type referencing of post_type - I'm
getting this error:
error: no type named `pos_type' in `struct std::char_traits'
Below is the gcc output of my build error. Any help with this is
greatly appreciated!
This error is familiar. I had it when doing the tests and I found that
char_traits was defined for gcc:
#if defined (_GLIBCXX_USE_WCHAR_T) || defined (_GLIBCXX_USE_WSTRING)
/// 21.1.3.2 char_traits specializations
template<>
struct char_traits
{
typedef wchar_t char_type;
typedef wint_t int_type;
typedef streamoff off_type;
#if defined (_GLIBCXX_USE_WCHAR_T)
typedef wstreampos pos_type;
typedef mbstate_t state_type;
#endif
avoids defining pos_type if _GLIBCXX_USE_WCHAR_T is not defined. It
seems that mingw defines _GLIBCXX_USE_WSTRING but not
_GLIBCXX_USE_WSTRING. Consequence: you can't use wide streams.
I modified my local header to pass the tests... and that's why my local
tests succeed. The error is produced by the explicit instantiations of
bufferstream_test.cpp:
//Force instantiations to catch compile-time errors
template class basic_bufferbuf<char>;
template class basic_bufferbuf;
template class basic_bufferstream<char>;
template class basic_bufferstream;
template class basic_ibufferstream<char>;
template class basic_ibufferstream;
template class basic_obufferstream<char>;
template class basic_obufferstream;
Comment instantiations taking wchar_t parameter to avoid the error.
Googling around, I've found that Boost.Iostreams
documentation(http://www.boost.org/libs/iostreams/doc/portability.html)
marks gcc-mingw 3.2-4.0 as "Wide streams are not supported". So I'm
afraid you've found a bug in the Shmem test. Wide stream instantiations
should be removed or surrounded by an #ifdef when mingw is being used.
Thanks and regards,
Ion