Package: libmagick++-6.q16-dev
Version: 8:6.9.11.24+dfsg-1+b1

This bug is based on testing related to
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=966904

Compiling the following simple test program fails.

#include <Magick++.h>
#include <assert.h>
int main() {
    assert(1==2);
}

g++ `pkg-config --cflags ImageMagick++`  test.cpp

In file included from test.cpp:2:
test.cpp: In function ‘int main()’:
test.cpp:4:5: error: ‘__assert_fail’ was not declared in this scope; did you 
mean ‘MagickCore::__assert_fail’?
    4 |     assert(1==2);
      |     ^~~~~~
In file included from /usr/include/ImageMagick-6/magick/memory_.h:22,
                 from /usr/include/ImageMagick-6/magick/MagickCore.h:125,
                 from /usr/include/ImageMagick-6/Magick++/Include.h:45,
                 from /usr/include/ImageMagick-6/Magick++.h:10,
                 from test.cpp:1:
/usr/include/assert.h:69:13: note: ‘MagickCore::__assert_fail’ declared here
   69 | extern void __assert_fail (const char *__assertion, const char *__file,
      |

The same code builds fine in buster.

The issue is that Magick++/Include.h includes the imagemagick headers inside a 
namespace,
unfortunately the imagemagick headers in turn include the assert.h header which 
therefore
gets included inside the namespace and breaks other code that tries to use 
functionality
from assert.h

A possible fix would be to have Include.h include assert.h before opening the 
namespace.
(a number of other standard C headers are already included by Include.h 
presumablly
for this very reason).

Reply via email to