Description
When building libsigc++ with CMake, I'm getting the error shown below.
The problem is that libsigc++ makes use of new C++17 features (std::visit, std::invoke, ...), but the CMAKE_CXX_FLAGS
(CMakLists.txt:31) are set to -std=c++1y
(what is for C++14).
Using -std=c++1z
or -std=c++17
works.
In file included from /home/workspace/libsigcplusplus/sigc++/functors/slot.h:23:0,
from /home/workspace/libsigcplusplus/sigc++/signal_base.h:27,
from /home/workspace/libsigcplusplus/sigc++/signal_base.cc:18:
/home/workspace/libsigcplusplus/sigc++/visit_each.h: In member function ‘void sigc::internal::limit_trackable_target<T_action>::operator()(T_type&&) const’:
/home/workspace/libsigcplusplus/sigc++/visit_each.h:48:8: warning: ‘if constexpr’ only available with -std=c++1z or -std=gnu++1z
if constexpr(is_base_of_or_same_v<sigc::trackable, T_type>) {
^~~~~~~~~
/home/workspace/libsigcplusplus/sigc++/visit_each.h:49:14: error: ‘invoke’ is not a member of ‘std’ std::invoke(action_, type);
^~~~~~
/home/workspace/libsigcplusplus/sigc++/visit_each.h:49:14: note: suggested alternative: ‘__invoke’ std::invoke(action_, type);
^~~~~~
__invoke