📄 enable_if.hpp
字号:
// (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, <= 1200) typedef Return type;# endif }; } // namespace iterators} // namespace boost#include <boost/iterator/detail/config_undef.hpp>#endif // BOOST_ENABLE_IF_23022003THW_HPP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -