diff -r boost_1_58_0/boost/type_erasure_orig/callable.hpp boost_1_58_0/boost/type_erasure/callable.hpp 33a34,37 > #include > #include > #include > 71,73c75 < #elif !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \ < !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \ < !BOOST_WORKAROUND(BOOST_MSVC, == 1800) --- > #elif !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) 92a95,111 > #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1800)) > > /* workaround for buggy type resolution in VS2013 > * indirection of operator() seems to work > */ > #define CALL_OP_FUNC call_op > #define CALL_OP_FORWARDER(is_const) \ > template \ > auto operator()(Args&&... args) BOOST_PP_IF(is_const, BOOST_PP_IDENTITY(const), BOOST_PP_EMPTY) () -> \ > decltype(call_op(std::forward(args)...) ) { \ > return call_op(std::forward(args)...); \ > } > #else > #define CALL_OP_FUNC operator() > #define CALL_OP_FORWARDER() > #endif > 108c127 < operator()(typename ::boost::type_erasure::as_param::type... arg) --- > CALL_OP_FUNC(typename ::boost::type_erasure::as_param::type... arg) 112a132 > CALL_OP_FORWARDER(/*is_const*/ 0) 129,130c149,150 < typename ::boost::type_erasure::rebind_any::type operator()( < typename ::boost::type_erasure::as_param::type... arg) const --- > typename ::boost::type_erasure::rebind_any::type > CALL_OP_FUNC(typename ::boost::type_erasure::as_param::type... arg) const 134a155 > CALL_OP_FORWARDER(/*is_const*/ 1) 156c177 < using Base::operator(); --- > using Base::CALL_OP_FUNC; 158c179 < operator()(typename ::boost::type_erasure::as_param::type... arg) --- > CALL_OP_FUNC(typename ::boost::type_erasure::as_param::type... arg) 162a184 > CALL_OP_FORWARDER(/*is_const*/ 0) 184c206 < using Base::operator(); --- > using Base::CALL_OP_FUNC; 186c208 < operator()(typename ::boost::type_erasure::as_param::type... arg) const --- > CALL_OP_FUNC(typename ::boost::type_erasure::as_param::type... arg) const 190a213 > CALL_OP_FORWARDER(/*is_const*/ 1) 192a216,218 > #undef CALL_OP_FUNC > #undef CALL_OP_FORWARDER > 197a224,233 > #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1800)) > > static size_t const _index = sizeof(::boost::declval(). > _boost_type_erasure_deduce_callable(::boost::declval()... )) - 1; > > typedef typename ::boost::mpl::at_c< > typename This::_boost_type_erasure_callable_results, > _index > >::type type; > #else 201c237 < _boost_type_erasure_deduce_callable(::boost::declval()...)) - 1 --- > _boost_type_erasure_deduce_callable(::boost::declval()... )) - 1 202a239 > #endif diff -r boost_1_58_0/boost/type_erasure_orig/constructible.hpp boost_1_58_0/boost/type_erasure/constructible.hpp 64,66c64 < #elif !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \ < !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \ < !BOOST_WORKAROUND(BOOST_MSVC, == 1800) --- > #elif !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) diff -r boost_1_58_0/boost/type_erasure_orig/detail/adapt_to_vtable.hpp boost_1_58_0/boost/type_erasure/detail/adapt_to_vtable.hpp 178,180c178 < #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \ < !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \ < !BOOST_WORKAROUND(BOOST_MSVC, == 1800) --- > #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) diff -r boost_1_58_0/boost/type_erasure_orig/free.hpp boost_1_58_0/boost/type_erasure/free.hpp 20a21 > #include 40,41c41 < defined(BOOST_TYPE_ERASURE_DOXYGEN) || \ < BOOST_WORKAROUND(BOOST_MSVC, == 1800) --- > defined(BOOST_TYPE_ERASURE_DOXYGEN) 214a215,337 > #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1800)) > > namespace boost { namespace type_erasure > { > template > struct type_vec; > > namespace detail > { > template > struct transformed_type_vec_impl; > > template > struct transformed_type_vec_impl > { > typedef TVec type; > }; > > template > struct transformed_type_vec_impl, Base, I, N, Ti, T...> > { > typedef typename ::boost::type_erasure::as_param::type Ui; > > typedef > typename transformed_type_vec_impl< > type_vec, > Base, I + 1, N, T... > >::type > type; > }; > > template > struct transformed_type_vec_impl, Base, N, N, Ti, T...> > { > typedef typename ::boost::type_erasure::detail::maybe_const_this_param::type Ui; > > typedef > typename transformed_type_vec_impl< > type_vec, > Base, N + 1, N, T... > >::type > type; > }; > > template > struct transformed_type_vec > { > typedef > typename first_placeholder_index< > typename ::boost::remove_cv< > typename ::boost::remove_reference::type > >::type... > >::type > free_p_idx; > > typedef > typename transformed_type_vec_impl< > type_vec<>, Base, 0, free_p_idx::value, T... > >::type > type; > }; > } // namespace detail > } > } // namespace boost::type_erasure > > #define BOOST_TYPE_ERASURE_INJECT_NAME_CAT(z, st, elem) \ > BOOST_PP_CAT(st##_, elem) > > #define BOOST_TYPE_ERASURE_INJECT_NAME(seq) \ > BOOST_PP_SEQ_FOLD_LEFT(BOOST_TYPE_ERASURE_INJECT_NAME_CAT, inject, seq) > > #define BOOST_TYPE_ERASURE_FREE_II(qual_name, concept_name, function_name, N) \ > BOOST_TYPE_ERASURE_OPEN_NAMESPACE(qual_name) \ > \ > template \ > struct concept_name; \ > \ > template \ > struct concept_name { \ > static R apply(T... t) { \ > return function_name(std::forward(t)...); \ > } \ > }; \ > \ > template \ > struct concept_name { \ > static void apply(T... t) { \ > function_name(std::forward(t)...); \ > } \ > }; \ > \ > BOOST_TYPE_ERASURE_CLOSE_NAMESPACE(qual_name) \ > \ > namespace boost { namespace type_erasure { \ > template \ > struct BOOST_TYPE_ERASURE_INJECT_NAME(qual_name); \ > \ > template \ > struct BOOST_TYPE_ERASURE_INJECT_NAME(qual_name) >: Base { \ > friend extern typename ::boost::type_erasure::rebind_any::type \ > function_name(U... u) { \ > return ::boost::type_erasure::call( \ > BOOST_TYPE_ERASURE_QUALIFIED_NAME(qual_name)(), \ > std::forward (u)... ); \ > } \ > }; \ > \ > template \ > struct concept_interface< \ > BOOST_TYPE_ERASURE_QUALIFIED_NAME(qual_name), \ > Base, \ > typename ::boost::type_erasure::detail::first_placeholder< \ > typename ::boost::remove_cv< \ > typename ::boost::remove_reference::type \ > >::type... \ > >::type \ > > : BOOST_TYPE_ERASURE_INJECT_NAME(qual_name) typename ::boost::type_erasure::detail::transformed_type_vec::type \ > > \ > {}; \ > }} /* namespace boost::type_erasure */ > #else > 274a398 > #endif 310c434 < function_name, \ --- > function_name, \ diff -r boost_1_58_0/boost/type_erasure_orig/member.hpp boost_1_58_0/boost/type_erasure/member.hpp 38,39c38 < defined(BOOST_TYPE_ERASURE_DOXYGEN) || \ < BOOST_WORKAROUND(BOOST_MSVC, == 1800) --- > defined(BOOST_TYPE_ERASURE_DOXYGEN)