Opened 8 years ago
Closed 7 years ago
#11175 closed Bugs (fixed)
signals2, filesystem, probably others fail on clang targeting win32 when exceptions are disabled
Reported by: | Owned by: | Beman Dawes | |
---|---|---|---|
Milestone: | To Be Determined | Component: | filesystem |
Version: | Boost 1.57.0 | Severity: | Problem |
Keywords: | Cc: |
Description
To reproduce:
clang -fno-exceptions -std=c++14 reprod.cpp
reprod.cpp:
#include <boost/filesystem.hpp> #include <boost/signals2.hpp>
You can target win32 from Linux using wclang (https://github.com/tpoechtrager/wclang), though you must have a i686-w64-mingw32 environment installed. Substitute 'clang' for 'w32-clang' above. This is how I tested; since clang is rather universal as a compiler, these errors likely also occur when compiling for win32 on win32.
The documentation for filesystem3 indicates that it should be usable with exceptions disabled, so this is a bug.
Errors:
In file included from reprod.cpp:1: In file included from /usr/i686-w64-mingw32/local/include/boost/filesystem.hpp:17: /usr/i686-w64-mingw32/local/include/boost/filesystem/operations.hpp:80:9: error: cannot use 'try' with exceptions disabled try ^ /usr/i686-w64-mingw32/local/include/boost/filesystem/operations.hpp:92:9: error: cannot use 'try' with exceptions disabled try ^ /usr/i686-w64-mingw32/local/include/boost/filesystem/operations.hpp:105:9: error: cannot use 'try' with exceptions disabled try ^ /usr/i686-w64-mingw32/local/include/boost/filesystem/operations.hpp:132:9: error: cannot use 'try' with exceptions disabled try ^ /usr/i686-w64-mingw32/local/include/boost/filesystem/operations.hpp:1005:11: error: cannot use 'throw' with exceptions disabled BOOST_FILESYSTEM_THROW(filesystem_error( ^ /usr/i686-w64-mingw32/local/include/boost/filesystem/config.hpp:46:36: note: expanded from macro 'BOOST_FILESYSTEM_THROW' #define BOOST_FILESYSTEM_THROW(EX) throw EX ^ In file included from reprod.cpp:2: In file included from /usr/i686-w64-mingw32/local/include/boost/signals2.hpp:16: /usr/i686-w64-mingw32/local/include/boost/signals2/deconstruct_ptr.hpp:43:9: error: cannot use 'try' with exceptions disabled try ^ In file included from reprod.cpp:2: In file included from /usr/i686-w64-mingw32/local/include/boost/signals2.hpp:18: /usr/i686-w64-mingw32/local/include/boost/signals2/last_value.hpp:45:11: error: cannot use 'try' with exceptions disabled try ^ /usr/i686-w64-mingw32/local/include/boost/signals2/last_value.hpp:66:11: error: cannot use 'try' with exceptions disabled try ^ In file included from reprod.cpp:2: In file included from /usr/i686-w64-mingw32/local/include/boost/signals2.hpp:19: In file included from /usr/i686-w64-mingw32/local/include/boost/signals2/signal.hpp:28: /usr/i686-w64-mingw32/local/include/boost/signals2/detail/slot_call_iterator.hpp:87:15: error: cannot use 'throw' with exceptions disabled throw; ^ /usr/i686-w64-mingw32/local/include/boost/signals2/detail/slot_call_iterator.hpp:80:13: error: cannot use 'try' with exceptions disabled try ^ In file included from reprod.cpp:2: In file included from /usr/i686-w64-mingw32/local/include/boost/signals2.hpp:19: In file included from /usr/i686-w64-mingw32/local/include/boost/signals2/signal.hpp:29: /usr/i686-w64-mingw32/local/include/boost/signals2/optional_last_value.hpp:32:11: error: cannot use 'try' with exceptions disabled try ^ /usr/i686-w64-mingw32/local/include/boost/signals2/optional_last_value.hpp:53:11: error: cannot use 'try' with exceptions disabled try ^ 12 errors generated.
Note:
See TracTickets
for help on using tickets.
The problem was out-of-date documentation causing users to incorrectly expect that the library could be used with exceptions disabled. It cannot be used without exceptions, and the documentation has been changed to reflect this reality.
Sorry for the confusion,
--Beman