| // Copyright 2004 The Trustees of Indiana University. |
| |
| // Use, modification and distribution is subject to 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) |
| |
| // Authors: Douglas Gregor |
| // Andrew Lumsdaine |
| |
| // |
| // This file contains helps that enable concept-based overloading |
| // within the Boost Graph Library. |
| // |
| #ifndef BOOST_GRAPH_OVERLOADING_HPP |
| #define BOOST_GRAPH_OVERLOADING_HPP |
| |
| #include <boost/type_traits/is_base_and_derived.hpp> |
| #include <boost/utility/enable_if.hpp> |
| |
| namespace boost { namespace graph { namespace detail { |
| |
| struct no_parameter {}; |
| |
| } } } // end namespace boost::graph::detail |
| |
| #ifndef BOOST_NO_SFINAE |
| |
| #define BOOST_GRAPH_ENABLE_IF_MODELS(Graph, Tag, Type) \ |
| typename enable_if_c<(is_base_and_derived< \ |
| Tag, \ |
| typename graph_traits<Graph>::traversal_category>::value), \ |
| Type>::type |
| |
| #define BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph, Tag) \ |
| , BOOST_GRAPH_ENABLE_IF_MODELS(Graph, Tag, \ |
| ::boost::graph::detail::no_parameter) \ |
| = ::boost::graph::detail::no_parameter() |
| |
| #else |
| |
| #define BOOST_GRAPH_ENABLE_IF_MODELS(Graph, Tag, Type) Type |
| #define BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph, Tag) |
| |
| #endif // no SFINAE support |
| |
| #endif // BOOST_GRAPH_OVERLOADING_HPP |