forked from boostorg/iterator
Reverted: 2e099caceb9..21102938e8ccb I'm going to reapply some of them soon, but it's easier to revert them all first, as there are conflicts. Also the number of changes that were inserted since then, mean that there would be a huge gap between related changes.
87 lines
2.0 KiB
C++
87 lines
2.0 KiB
C++
// (C) Copyright David Abrahams 2002.
|
|
// (C) Copyright Jeremy Siek 2002.
|
|
// (C) Copyright Thomas Witt 2002.
|
|
// 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_ENABLE_IF_23022003THW_HPP
|
|
#define BOOST_ENABLE_IF_23022003THW_HPP
|
|
|
|
#include <boost/detail/workaround.hpp>
|
|
#include <boost/mpl/identity.hpp>
|
|
|
|
#include <boost/iterator/detail/config_def.hpp>
|
|
|
|
//
|
|
// Boost iterators uses its own enable_if cause we need
|
|
// special semantics for deficient compilers.
|
|
// 23/02/03 thw
|
|
//
|
|
|
|
namespace boost
|
|
{
|
|
|
|
namespace iterators
|
|
{
|
|
//
|
|
// Base machinery for all kinds of enable if
|
|
//
|
|
template<bool>
|
|
struct enabled
|
|
{
|
|
template<typename T>
|
|
struct base
|
|
{
|
|
typedef T type;
|
|
};
|
|
};
|
|
|
|
//
|
|
// For compilers that don't support "Substitution Failure Is Not An Error"
|
|
// enable_if falls back to always enabled. See comments
|
|
// on operator implementation for consequences.
|
|
//
|
|
template<>
|
|
struct enabled<false>
|
|
{
|
|
template<typename T>
|
|
struct base
|
|
{
|
|
#ifdef BOOST_NO_SFINAE
|
|
|
|
typedef T type;
|
|
|
|
// This way to do it would give a nice error message containing
|
|
// invalid overload, but has the big disadvantage that
|
|
// there is no reference to user code in the error message.
|
|
//
|
|
// struct invalid_overload;
|
|
// typedef invalid_overload type;
|
|
//
|
|
#endif
|
|
};
|
|
};
|
|
|
|
|
|
template <class Cond,
|
|
class Return>
|
|
struct enable_if
|
|
# if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_IS_CONVERTIBLE)
|
|
: enabled<(Cond::value)>::template base<Return>
|
|
# else
|
|
: mpl::identity<Return>
|
|
# endif
|
|
{
|
|
# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
|
|
typedef Return type;
|
|
# endif
|
|
};
|
|
|
|
} // namespace iterators
|
|
|
|
} // namespace boost
|
|
|
|
#include <boost/iterator/detail/config_undef.hpp>
|
|
|
|
#endif // BOOST_ENABLE_IF_23022003THW_HPP
|