Boost-Graph

 view release on metacpan or  search on metacpan

include/boost/tuple/detail/tuple_basic_no_partial_spec.hpp  view on Meta::CPAN

      null_type(const null_type&, const null_type&) {}
    };

    // a helper function to provide a const null_type type temporary
    inline const null_type cnull_type() { return null_type(); }

// forward declaration of tuple
    template<
      typename T1 = null_type,
      typename T2 = null_type,
      typename T3 = null_type,
      typename T4 = null_type,
      typename T5 = null_type,
      typename T6 = null_type,
      typename T7 = null_type,
      typename T8 = null_type,
      typename T9 = null_type,
      typename T10 = null_type
    >
    class tuple;

// forward declaration of cons
    template<typename Head, typename Tail = null_type>
    struct cons;

    namespace detail {

      // Takes a pointer and routes all assignments to whatever it points to
      template<typename T>
      struct assign_to_pointee
      {
      public:
        explicit assign_to_pointee(T* p) : ptr(p) {}

        template<typename Other>
        assign_to_pointee& operator=(const Other& other)
        {
          *ptr = other;
          return *this;
        }

      private:
        T* ptr;
      };

      // Swallows any assignment
      struct swallow_assign
      {
        template<typename T>
        swallow_assign const& operator=(const T&) const
        {
          return *this;
        }
      };

    template <typename T> struct add_const_reference : add_reference<typename add_const<T>::type> {};

    template <class MyTail>
    struct init_tail
    {
        // Each of vc6 and vc7 seem to require a different formulation
        // of this return type
        template <class H, class T>
#if BOOST_WORKAROUND(BOOST_MSVC, == 1200)
        static typename add_reference<typename add_const<T>::type>::type
#else
        static typename add_const_reference<T>::type
#endif
        execute( cons<H,T> const& u, long )
        {
            return u.get_tail();
        }
    };

    template <>
    struct init_tail<null_type>
    {
        template <class H>
        static null_type execute( cons<H,null_type> const& u, long )
        {
            return null_type();
        }

        template <class U>
        static null_type execute(U const&, ...)
        {
            return null_type();
        }
     private:
        template <class H, class T>
        void execute( cons<H,T> const&, int);
    };

    template <class Other>
    Other const&
    init_head( Other const& u, ... )
    {
        return u;
    }

    template <class H, class T>
    typename add_reference<typename add_const<H>::type>::type
    init_head( cons<H,T> const& u, int )
    {
        return u.get_head();
    }

    inline char**** init_head(null_type const&, int);

  } // end of namespace detail

    // cons builds a heterogenous list of types
   template<typename Head, typename Tail>
   struct cons
   {
     typedef cons self_type;
     typedef Head head_type;
     typedef Tail tail_type;

    private:
       typedef typename boost::add_reference<head_type>::type head_ref;



( run in 0.949 second using v1.01-cache-2.11-cpan-39bf76dae61 )