* Gabriel Dos Reis: > The first resistance seems to come from the pervasive use of the implicit > conversion void* -> T*, mostly with storage allocating functions.
This can be worked around on the C++ side, see the example code below. It's a kludge, but it's not too bad IMHO. class xmalloc_result; xmalloc_result xmalloc (size_t); class xmalloc_result { friend xmalloc_result xmalloc (size_t); const size_t size_; xmalloc_result (size_t size) : size_ (size) { } xmalloc_result operator= (const xmalloc_result&); // not implemented public: template <typename T> operator T* () const { return static_cast<T*> (malloc(size_)); } }; inline xmalloc_result xmalloc (size_t size) { return xmalloc_result (size); } char * foo (void) { return xmalloc (1); } void bar (int **result) { *result = xmalloc (sizeof (int)); }