#ifndef _COMPOSITE_VISITOR_H_ #define _COMPOSITE_VISITOR_H_ #include #if !defined(CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES) && !defined(CGAL_CFG_NO_CPP0X_TUPLE) #include namespace CGAL { template struct overload_helper : public overload_helper { typedef typename std::tuple_element::type inner_type; typename inner_type::result_type operator()(typename inner_type::argument_type x) { return std::get(static_cast(this)->t)(x); } using overload_helper::operator(); }; template struct overload_helper { typedef typename std::tuple_element<0 ,T>::type inner_type; typename inner_type::result_type operator()(typename inner_type::argument_type x) { return std::get<0>(static_cast(this)->t)(x); } }; template struct overload : public overload_helper::value, overload > { // typedef typename std::tuple_element<0, T>::type::result_type result_type; T t; overload(T&& t) : t(t) {} overload(const T& t) : t(t) {} }; template overload make_overload(T&& t) { return overload(t); } } // namespace CGAL #endif // !defined(CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES) && !defined(CGAL_CFG_NO_CPP0X_TUPLE) #endif /* _COMPOSITE_VISITOR_H_ */