Opened 14 years ago
Closed 14 years ago
#2277 closed Bugs (fixed)
Invalid assignment void* to iovec::iov_base on the Solaris
| Reported by: | Owned by: | chris_kohlhoff | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | asio |
| Version: | Boost Development Trunk | Severity: | Problem |
| Keywords: | Cc: |
Description
On the Solaris following test case cannot be compiled by Sun C++.
% cat test.cc
#include <boost/asio.hpp>
int main()
{
return 0;
};
% CC -V -c -library=stlport4 -I$BOOST test.cc CC: Sun C++ 5.9 SunOS_sparc Patch 124863-06 2008/07/08 $BOOST/boost/asio/detail/socket_ops.hpp", line 218: Error: Cannot assign void* to char*. $BOOST/boost/asio/detail/socket_ops.hpp", line 229: Error: Cannot assign void* to char*. $BOOST/boost/asio/detail/descriptor_ops.hpp", line 66: Error: Cannot assign void* to char*. $BOOST/boost/asio/detail/descriptor_ops.hpp", line 72: Error: Cannot assign void* to char*.
The problem exists in the 1.35, 1.36 and trunk.
On the Solaris while code compiled by Sun C++ iovec::iov_base field has type caddr_t, which is a typedef, usually for char*. So it is impossible to assign void* to it without explicit cast.
Suggested patch is attached.
Attachments (1)
Change History (2)
by , 14 years ago
| Attachment: | asio_sunpro_solaris.patch added |
|---|
comment:1 by , 14 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Should have been fixed by changeset #48525. (Which was purely coincidentally checked in on the same day this item was raised!)
However, the intention was that _XOPEN_SOURCE should be defined when building on Solaris. In that case, iov_base is void* as per POSIX specification and older versions of boost.asio work just fine.

Suggested patch