⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 returntype_deduction.hpp

📁 CGAL is a collaborative effort of several sites in Europe and Israel. The goal is to make the most i
💻 HPP
字号:
/*=============================================================================    Copyright (c) 2001-2003 Joel de Guzman    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)==============================================================================*/#ifndef BOOST_NUMERIC_UBLAS_NUMERICTYPE_DEDUCTION_IPP#define BOOST_NUMERIC_UBLAS_NUMERICTYPE_DEDUCTION_IPP// See original in boost-sandbox/boost/utility/type_deduction.hpp for comments#include <boost/mpl/vector/vector20.hpp>#include <boost/mpl/at.hpp>#include <boost/mpl/or.hpp>#include <boost/mpl/identity.hpp>#include <boost/type_traits/remove_cv.hpp>#include <boost/type_traits/is_same.hpp>#include <boost/utility/enable_if.hpp>namespace boost { namespace numeric { namespace ublas {struct error_cant_deduce_type {};  namespace type_deduction_detail  {    typedef char(&bool_value_type)[1];    typedef char(&float_value_type)[2];    typedef char(&double_value_type)[3];    typedef char(&long_double_value_type)[4];    typedef char(&char_value_type)[5];    typedef char(&schar_value_type)[6];    typedef char(&uchar_value_type)[7];    typedef char(&short_value_type)[8];    typedef char(&ushort_value_type)[9];    typedef char(&int_value_type)[10];    typedef char(&uint_value_type)[11];    typedef char(&long_value_type)[12];    typedef char(&ulong_value_type)[13];        typedef char(&x_value_type)[14];    typedef char(&y_value_type)[15];    typedef char(&cant_deduce_type)[16];    template <typename T, typename PlainT = typename remove_cv<T>::type>    struct is_basic        : mpl::or_<          typename mpl::or_<              is_same<PlainT, bool>            , is_same<PlainT, float>            , is_same<PlainT, double>            , is_same<PlainT, long double>          > ::type,          typename mpl::or_<              is_same<PlainT, char>            , is_same<PlainT, signed char>            , is_same<PlainT, unsigned char>            , is_same<PlainT, short>            , is_same<PlainT, unsigned short>            > ::type,          typename mpl::or_<              is_same<PlainT, int>            , is_same<PlainT, unsigned int>            , is_same<PlainT, long>            , is_same<PlainT, unsigned long>            > ::type        > {};    struct asymmetric;    template <typename X, typename Y>    cant_deduce_type    test(...); // The black hole !!!    template <typename X, typename Y>    bool_value_type    test(bool const&);    template <typename X, typename Y>    float_value_type    test(float const&);        template <typename X, typename Y>    double_value_type    test(double const&);    template <typename X, typename Y>    long_double_value_type    test(long double const&);    template <typename X, typename Y>    char_value_type    test(char const&);    template <typename X, typename Y>    schar_value_type    test(signed char const&);    template <typename X, typename Y>    uchar_value_type    test(unsigned char const&);    template <typename X, typename Y>    short_value_type    test(short const&);    template <typename X, typename Y>    ushort_value_type    test(unsigned short const&);    template <typename X, typename Y>    int_value_type    test(int const&);    template <typename X, typename Y>    uint_value_type    test(unsigned int const&);    template <typename X, typename Y>    long_value_type    test(long const&);    template <typename X, typename Y>    ulong_value_type    test(unsigned long const&);    template <typename X, typename Y>    typename disable_if<        is_basic<X>, x_value_type    >::type    test(X const&);    template <typename X, typename Y>    typename disable_if<        mpl::or_<            is_basic<Y>          , is_same<Y, asymmetric>          , is_same<const X, const Y>        >      , y_value_type    >::type    test(Y const&);    template <typename X, typename Y>    struct base_result_of    {        typedef typename remove_cv<X>::type x_type;        typedef typename remove_cv<Y>::type y_type;        typedef mpl::vector16<            mpl::identity<bool>          , mpl::identity<float>          , mpl::identity<double>          , mpl::identity<long double>          , mpl::identity<char>          , mpl::identity<signed char>          , mpl::identity<unsigned char>          , mpl::identity<short>          , mpl::identity<unsigned short>          , mpl::identity<int>          , mpl::identity<unsigned int>          , mpl::identity<long>          , mpl::identity<unsigned long>          , mpl::identity<x_type>          , mpl::identity<y_type>          , mpl::identity<error_cant_deduce_type>        >        types;    };}}} } // namespace boost::numeric::ublas ::type_deduction_detail#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -