Clang/GCC incompatiblity
Opened this issue · 5 comments
There are few problems with clang.
First, It is not able to find GCC headers, it is caused by -fcoroutines-ts and -fcoroutines does not define the same preprocessor definition, It can be workarounded with -D__cpp_impl_coroutine=1 (what -fcoroutines does).
And now, clang complains that a coroutine cannot be used without <experimental/coroutine> inclusion what is breaking with GCC.
eg.:
~/cppcoro/test/async_latch_tests.cpp:59:4: error: std::experimental::coroutine_traits type was not found; include <experimental/coroutine> before defining a coroutine
co_await latch;
^
Currently the only way to use with clang is to use libc++ (tested with clang-12 on Arch):
cmake -DCMAKE_CXX_FLAGS="-stdlib=libc++" <path_to_sources>
On ubuntu, executables must be explicitly linked with -lc++
:
cmake -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-lc++" <path_to_sources>
Is this now solved with the latest changes in the integrate_all branch?
No, it is not.
Clang will only compile with libc++, but it should also work with libstdc++.
This won't change until clang updates it's coroutine header to non-experimental path, or even accept it.
I guess this is solved in the master branch of andreasbuhr/cppcoro?
I see that more documentation is required.
The answer is simple can you build it with clang without --stdlib=libc++
?