namespace boost {
  namespace dataflow {
    namespace blueprint {
      class component;
      template<typename Base> class based_component;

      template<typename T, typename Enable = void> 
        struct underlying_component_type;
      template<typename T, typename Enable = void> 
        struct get_underlying_component;

      template<typename Component, typename Tag = default_tag> class component_t;

      template<typename T> 
        struct underlying_component_type<T, typename dataflow::utility::enable_if_type< typename T::element_type >::type>;
      template<typename T> 
        struct get_underlying_component<T, typename dataflow::utility::enable_if_type< typename T::element_type >::type>;
    }
  }
}