47 lines
1.5 KiB
C++
47 lines
1.5 KiB
C++
// 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
|