Ticket #5475: fix_gcc_4_4_regression_by_C.patch
File fix_gcc_4_4_regression_by_C.patch, 3.5 KB (added by , 11 years ago) |
---|
-
boost/foreach.hpp
1052 1052 1053 1053 namespace boost { namespace foreach_detail_ 1054 1054 { 1055 template<typename Cond, typename T> 1056 inline typename boost::mpl::if_<Cond, T const, T>::type &add_const_if(T &t) 1057 { 1058 return t; 1059 } 1060 1055 1061 template<typename T> 1056 1062 typename remove_cv<typename decay<T>::type>::type decay_copy(T &&); 1057 1063 1058 1064 template<typename T> 1059 1065 T const add_const_if_rvalue(T &&); 1060 1066 }} 1061 # define BOOST_FOREACH_AUTO_OBJECT(NAME, EXPR) \ 1067 1068 # define BOOST_FOREACH_IS_RVALUE(COL) \ 1069 (true ? 0 : boost::foreach_detail_::is_rvalue(COL)) 1070 1071 # if (BOOST_WORKAROUND(__GNUC__, == 4) && (__GNUC_MINOR__ == 4) && !defined(BOOST_INTEL) && !defined(BOOST_CLANG)) 1072 # define BOOST_FOREACH_AUTO_OBJECT(NAME, EXPR) \ 1062 1073 if (bool BOOST_PP_CAT(NAME, _defined) = false) {} else \ 1074 for (auto NAME = (EXPR); !BOOST_PP_CAT(NAME, _defined); BOOST_PP_CAT(NAME, _defined) = true) 1075 # else 1076 # define BOOST_FOREACH_AUTO_OBJECT(NAME, EXPR) \ 1077 if (bool BOOST_PP_CAT(NAME, _defined) = false) {} else \ 1063 1078 for (decltype(boost::foreach_detail_::decay_copy(EXPR)) NAME = (EXPR); \ 1064 1079 !BOOST_PP_CAT(NAME, _defined); BOOST_PP_CAT(NAME, _defined) = true) 1080 # endif 1065 1081 1066 1082 // If EXPR is an rvalue, bind it to a const rvalue reference. 1067 # define BOOST_FOREACH_AUTO_REF_REF(NAME, EXPR) \ 1083 # if (BOOST_WORKAROUND(__GNUC__, == 4) && (__GNUC_MINOR__ == 4) && !defined(BOOST_INTEL) && !defined(BOOST_CLANG)) 1084 # define BOOST_FOREACH_AUTO_REF_REF(NAME, EXPR) \ 1085 if (bool BOOST_PP_CAT(NAME, _tmp_defined) = false) {} else \ 1086 for (auto &&BOOST_PP_CAT(NAME, _tmp) = (EXPR); \ 1087 !BOOST_PP_CAT(NAME, _tmp_defined); BOOST_PP_CAT(NAME, _tmp_defined) = true) \ 1068 1088 if (bool BOOST_PP_CAT(NAME, _defined) = false) {} else \ 1089 for (auto &&NAME = boost::foreach_detail_::add_const_if< boost::is_rvalue_reference<decltype( (EXPR) ) &&> >( \ 1090 BOOST_PP_CAT(NAME, _tmp)); \ 1091 !BOOST_PP_CAT(NAME, _defined); BOOST_PP_CAT(NAME, _defined) = true) 1092 # else 1093 # define BOOST_FOREACH_AUTO_REF_REF(NAME, EXPR) \ 1094 if (bool BOOST_PP_CAT(NAME, _defined) = false) {} else \ 1069 1095 for (decltype(boost::foreach_detail_::add_const_if_rvalue(EXPR)) &&NAME = (EXPR); \ 1070 1096 !BOOST_PP_CAT(NAME, _defined); BOOST_PP_CAT(NAME, _defined) = true) 1097 # endif 1071 1098 1072 1099 #elif defined(BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION) 1073 1100 ///////////////////////////////////////////////////////////////////////////////