/usr/include/boost/variant/detail
NameSizeModeActions
apply_visitor_binary.hpp105220644editdlrm
apply_visitor_delayed.hpp43170644editdlrm
apply_visitor_unary.hpp48980644editdlrm
backup_holder.hpp20070644editdlrm
cast_storage.hpp12030644editdlrm
config.hpp7180644editdlrm
element_index.hpp19570644editdlrm
enable_recursive.hpp37650644editdlrm
enable_recursive_fwd.hpp22950644editdlrm
forced_return.hpp14850644editdlrm
hash_variant.hpp14300644editdlrm
has_result_type.hpp12170644editdlrm
initializer.hpp81710644editdlrm
make_variant_list.hpp22690644editdlrm
move.hpp16280644editdlrm
multivisitors_cpp11_based.hpp75570644editdlrm
multivisitors_cpp14_based.hpp56630644editdlrm
multivisitors_preprocessor_based.hpp64040644editdlrm
over_sequence.hpp15280644editdlrm
std_hash.hpp15750644editdlrm
substitute.hpp67730644editdlrm
substitute_fwd.hpp18170644editdlrm
variant_io.hpp23870644editdlrm
visitation_impl.hpp82560644editdlrm
Edit: /usr/include/boost/variant/detail/multivisitors_cpp14_based.hpp (5663B)
// Boost.Varaint // Contains multivisitors that are implemented via variadic templates, std::tuple // and decltype(auto) // // See http://www.boost.org for most recent version, including documentation. // // Copyright Antony Polukhin, 2013-2014. // // Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). #ifndef BOOST_VARIANT_DETAIL_MULTIVISITORS_CPP14_BASED_HPP #define BOOST_VARIANT_DETAIL_MULTIVISITORS_CPP14_BASED_HPP #if defined(_MSC_VER) # pragma once #endif #include #include namespace boost { namespace detail { namespace variant { // Forward declaration template class one_by_one_visitor_and_value_referer_cpp14; template inline one_by_one_visitor_and_value_referer_cpp14 make_one_by_one_visitor_and_value_referer_cpp14( Visitor& visitor, Visitables visitables, std::tuple values ) { return one_by_one_visitor_and_value_referer_cpp14 ( visitor, visitables, values ); } template class one_by_one_visitor_and_value_referer_cpp14 { Visitor& visitor_; std::tuple values_; Visitables visitables_; public: // structors one_by_one_visitor_and_value_referer_cpp14( Visitor& visitor, Visitables visitables, std::tuple values ) BOOST_NOEXCEPT : visitor_(visitor) , values_(values) , visitables_(visitables) {} public: // visitor interfaces template decltype(auto) operator()(Value&& value) const { return ::boost::apply_visitor( make_one_by_one_visitor_and_value_referer_cpp14( visitor_, tuple_tail(visitables_), std::tuple_cat(values_, std::make_tuple(wrap::value>(value))) ) , unwrap(std::get<0>(visitables_)) // getting Head element ); } private: one_by_one_visitor_and_value_referer_cpp14& operator=(const one_by_one_visitor_and_value_referer_cpp14&); }; template class one_by_one_visitor_and_value_referer_cpp14, Values...> { Visitor& visitor_; std::tuple values_; public: one_by_one_visitor_and_value_referer_cpp14( Visitor& visitor, std::tuple<> /*visitables*/, std::tuple values ) BOOST_NOEXCEPT : visitor_(visitor) , values_(values) {} template decltype(auto) do_call(Tuple t, index_sequence) const { return visitor_(unwrap(std::get(t))...); } template decltype(auto) operator()(Value&& value) const { return do_call( std::tuple_cat(values_, std::make_tuple(wrap::value>(value))), make_index_sequence() ); } }; }} // namespace detail::variant template inline decltype(auto) apply_visitor(const Visitor& visitor, T1&& v1, T2&& v2, T3&& v3, TN&&... vn, typename boost::disable_if< boost::detail::variant::has_result_type, bool >::type = true) { return boost::apply_visitor( ::boost::detail::variant::make_one_by_one_visitor_and_value_referer_cpp14( visitor, std::make_tuple( ::boost::detail::variant::wrap::value>(v2), ::boost::detail::variant::wrap::value>(v3), ::boost::detail::variant::wrap::value>(vn)... ), std::tuple<>() ), ::boost::forward(v1) ); } template inline decltype(auto) apply_visitor(Visitor& visitor, T1&& v1, T2&& v2, T3&& v3, TN&&... vn, typename boost::disable_if< boost::detail::variant::has_result_type, bool >::type = true) { return ::boost::apply_visitor( ::boost::detail::variant::make_one_by_one_visitor_and_value_referer_cpp14( visitor, std::make_tuple( ::boost::detail::variant::wrap::value>(v2), ::boost::detail::variant::wrap::value>(v3), ::boost::detail::variant::wrap::value>(vn)... ), std::tuple<>() ), ::boost::forward(v1) ); } } // namespace boost #endif // BOOST_VARIANT_DETAIL_MULTIVISITORS_CPP14_BASED_HPP