Trouble with std::forward and fusion vector using clang 3.4 and older library - is there a workaround?

I am trying to compile using clang 3.4 and -std=c++11. With the -std=c++11 it compiles and runs without any issue. With -std=c++11 I get boost_1_60_0\boost/fusion/container/vector/vector.hpp:126:20: error: no template named 'forward' in namespace 'std'; did you mean 'advance_detail::forward'? return std::forward<result>(*advance_c<N>(begin(seq))); and many similar errors. I have tried all the boost BOOST_NO_CXX11_HDR_ macros but not found one that resolves this issue. I don't have any choice about compiler version or library version due to other constraints. Any suggestions appreciated, Stan *#include* <boost/fusion/tuple.hpp> *#include* <boost/fusion/algorithm.hpp> *#include* <string> *#include <iostream>* *using* *namespace* boost::fusion; *struct* print { *template* <*typename* *T*> *void* *operator()*(*const* *T* &t) *const* { std::cout << std::boolalpha << t << '\n'; } }; *int* *main*() { *typedef* tuple<*int*, std::string, *bool*, *double*> tuple_type; tuple_type t(10,"Boost", *true*, 3.14); for_each(t, print()); }

Hi Stan, Sorry for quite late reply. On 2016/12/06 22:42, Stan Blakey wrote:
With the -std=c++11 it compiles and runs without any issue. With -std=c++11 I get Which line is correct?
boost_1_60_0\boost/fusion/container/vector/vector.hpp:126:20: error: no template named 'forward' in namespace 'std'; did you mean 'advance_detail::forward'?
return std::forward<result>(*advance_c<N>(begin(seq)));
and many similar errors. Which standard library (and its version) are you using?
If your standard library provides `std::forward` and it functions normally, try `BOOST_NO_CXX11_CONSTEXPR`. Kohei Takahashi

Hi Kohei, Sorry it is without --std=c++11 that every thing is fine. The boost code manages to solve not having std::forward when compiled without the std=c++11 flag. With --std=c++11 I get the compiler errors about missing std::forward. I have tried all the boost macros that pertain to library features with no success. I did at the option BOOST_NO_CXX11_CONSTEXPR and this doesn't work either. The compiler is the full clang 3.4 and does support c++11 features such as constexpr. It is the library that is old. std::printf("GLIBCXX: %d\n",__GLIBCXX__); produces GLIBCXX: 20070514 Below is the full source with all the macros I have on: Stan *#define* BOOST_NO_CXX11_HDR_TYPE_TRAITS *#define* BOOST_NO_CXX11_HDR_ATOMIC *#define* BOOST_NO_CXX11_HDR_ARRAY *#define* BOOST_NO_CXX11_HDR_CHRONO *#define* BOOST_NO_CXX11_HDR_CODECVT *#define* BOOST_NO_CXX11_HDR_CONDITION_VARIABLE *#define* BOOST_NO_CXX11_HDR_FORWARD_LIST *#define* BOOST_NO_CXX11_HDR_FUNCTIONAL *#define* BOOST_NO_CXX11_HDR_FUTURE *#define* BOOST_NO_CXX11_HDR_INITIALIZER_LIST *#define* BOOST_NO_CXX11_HDR_MUTEX *#define* BOOST_NO_CXX11_HDR_RANDOM *#define* BOOST_NO_CXX11_HDR_RATIO *#define* BOOST_NO_CXX11_HDR_SYSTEM_ERROR *#define* BOOST_NO_CXX11_HDR_THREAD *#define* BOOST_NO_CXX11_HDR_TUPLE *#define* BOOST_NO_CXX11_HDR_TYPEINDEX *#define* BOOST_NO_CXX11_HDR_TYPE_TRAITS *#define* BOOST_NO_CXX11_HDR_UNORDERED_MAP *#define* BOOST_NO_CXX11_NUMERIC_LIMITS *#define* BOOST_NO_CXX11_SMART_PTR *#define* BOOST_NO_CXX11_STD_UNORDERED *#define* BOOST_NO_CXX11_ADDRESSOF *#define* BOOST_NO_CXX11_ALLOCATOR *#define* BOOST_NO_CXX11_ATOMIC_SMART_PTR *#undef* BOOST_FUSION_HAS_VARIADIC_VECTOR *#include* <boost/fusion/tuple.hpp> *#include* <boost/fusion/algorithm.hpp> *#include* <string> *#include* <iostream> #include <cstdio> *using* *namespace* boost::fusion; *struct* print { *template* <*typename* *T*> *void* *operator()*(*const* *T* &t) *const* { std::cout << std::boolalpha << t << '\n'; } }; *int* *main*() { *#ifdef* __GLIBCPP__ std::printf("GLIBCPP: %d\n",__GLIBCPP__); *#endif* *#ifdef* __GLIBCXX__ std::printf("GLIBCXX: %d\n",__GLIBCXX__); *#endif* *typedef* tuple<*int*, std::string, *bool*, *double*> tuple_type; tuple_type t(10,"Boost", *true*, 3.14); for_each(t, print()); } On Thu, Dec 15, 2016 at 2:59 AM, Kohei Takahashi <flast@flast.jp> wrote:
Hi Stan,
Sorry for quite late reply. On 2016/12/06 22:42, Stan Blakey wrote:
With the -std=c++11 it compiles and runs without any issue. With -std=c++11 I get
Which line is correct?
boost_1_60_0\boost/fusion/container/vector/vector.hpp:126:20: error: no template named 'forward' in namespace 'std'; did you mean 'advance_detail::forward'?
return std::forward<result>(*advance_c<N>(begin(seq))); and many similar errors.
Which standard library (and its version) are you using?
If your standard library provides `std::forward` and it functions normally, try `BOOST_NO_CXX11_CONSTEXPR`.
Kohei Takahashi
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users

Hi Stan, On 2016/12/15 20:42, Stan Blakey wrote:
I have tried all the boost macros that pertain to library features with no success. I did at the option BOOST_NO_CXX11_CONSTEXPR and this doesn't work either. The compiler is the full clang 3.4 and does support c++11 features such as constexpr. It is the library that is old.
std::printf("GLIBCXX: %d\n",__GLIBCXX__);
produces
GLIBCXX: 20070514
Wow... It's gcc4.2.0... OK, I think `BOOST_NO_CXX11_RVALUE_REFERENCES` will fix this issue (and disable variadic fusion::vector). Kohei

Kohei, Yes that works. Thanks. Stan On Thu, Dec 15, 2016 at 8:03 PM, Kohei Takahashi <flast@flast.jp> wrote:
Hi Stan,
On 2016/12/15 20:42, Stan Blakey wrote:
I have tried all the boost macros that pertain to library features with no success. I did at the option BOOST_NO_CXX11_CONSTEXPR and this doesn't work either. The compiler is the full clang 3.4 and does support c++11 features such as constexpr. It is the library that is old.
std::printf("GLIBCXX: %d\n",__GLIBCXX__);
produces
GLIBCXX: 20070514
Wow... It's gcc4.2.0...
OK, I think `BOOST_NO_CXX11_RVALUE_REFERENCES` will fix this issue (and disable variadic fusion::vector).
Kohei
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (2)
-
Kohei Takahashi
-
Stan Blakey