Index: boost/lexical_cast.hpp =================================================================== --- boost/lexical_cast.hpp (revision 130) +++ boost/lexical_cast.hpp (revision 217) @@ -342,7 +342,7 @@ #ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS BOOST_STATIC_CONSTANT(std::size_t, value = std::numeric_limits::is_signed + - std::numeric_limits::is_specialized + // == 1 + std::numeric_limits::is_specialized + std::numeric_limits::digits10 * 2 ); #else Index: boost/mpl/assert.hpp =================================================================== --- boost/mpl/assert.hpp (revision 130) +++ boost/mpl/assert.hpp (revision 217) @@ -146,7 +146,11 @@ template< typename P > struct assert_arg_pred_not { typedef typename P::type p_type; +#ifdef __CUDACC__ + enum { p = !p_type::value }; +#else BOOST_MPL_AUX_ASSERT_CONSTANT( bool, p = !p_type::value ); +#endif typedef typename assert_arg_pred_impl

::type type; }; Index: boost/mpl/size_t_fwd.hpp =================================================================== --- boost/mpl/size_t_fwd.hpp (revision 130) +++ boost/mpl/size_t_fwd.hpp (revision 217) @@ -20,7 +20,12 @@ BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN +#if defined(__CUDACC__) +typedef std::size_t std_size_t; +template< std_size_t N > struct size_t; +#else template< std::size_t N > struct size_t; +#endif BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE BOOST_MPL_AUX_ADL_BARRIER_DECL(size_t) Index: boost/mpl/aux_/config/gcc.hpp =================================================================== --- boost/mpl/aux_/config/gcc.hpp (revision 130) +++ boost/mpl/aux_/config/gcc.hpp (revision 217) @@ -14,7 +14,7 @@ // $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ // $Revision: 49267 $ -#if defined(__GNUC__) && !defined(__EDG_VERSION__) +#if defined(__GNUC__) && !(defined(__EDG_VERSION__) || defined(__CUDACC__)) # define BOOST_MPL_CFG_GCC ((__GNUC__ << 8) | __GNUC_MINOR__) #else # define BOOST_MPL_CFG_GCC 0 Index: boost/mpl/aux_/integral_wrapper.hpp =================================================================== --- boost/mpl/aux_/integral_wrapper.hpp (revision 130) +++ boost/mpl/aux_/integral_wrapper.hpp (revision 217) @@ -56,7 +56,7 @@ // have to #ifdef here: some compilers don't like the 'N + 1' form (MSVC), // while some other don't like 'value + 1' (Borland), and some don't like // either -#if BOOST_WORKAROUND(__EDG_VERSION__, <= 243) +#if BOOST_WORKAROUND(__EDG_VERSION__, <= 243) || defined(__CUDACC__) private: BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, next_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1))); BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, prior_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1))); Index: boost/mpl/size_t.hpp =================================================================== --- boost/mpl/size_t.hpp (revision 130) +++ boost/mpl/size_t.hpp (revision 217) @@ -16,10 +16,22 @@ #include + +#if defined(__CUDACC__) + +//typedef std::size_t std_size_t; +#define AUX_WRAPPER_VALUE_TYPE std_size_t +#define AUX_WRAPPER_NAME size_t +#define AUX_WRAPPER_PARAMS(N) std_size_t N + +#else + #define AUX_WRAPPER_VALUE_TYPE std::size_t #define AUX_WRAPPER_NAME size_t #define AUX_WRAPPER_PARAMS(N) std::size_t N +#endif + #include #endif // BOOST_MPL_SIZE_T_HPP_INCLUDED Index: boost/iterator/iterator_concepts.hpp =================================================================== --- boost/iterator/iterator_concepts.hpp (revision 130) +++ boost/iterator/iterator_concepts.hpp (revision 217) @@ -133,9 +133,15 @@ , boost::EqualityComparable { + private: + template + struct trait { + typedef typename C::traversal_category traversal_category; + }; + public: BOOST_CONCEPT_ASSERT(( boost::Convertible< - BOOST_DEDUCED_TYPENAME SinglePassIterator::traversal_category + typename trait::traversal_category , boost::single_pass_traversal_tag > )); }; @@ -148,10 +154,15 @@ BOOST_MPL_ASSERT((boost::is_integral)); BOOST_MPL_ASSERT_RELATION(std::numeric_limits::is_signed, ==, true); - + private: + template + struct trait { + typedef typename C::traversal_category traversal_category; + }; + public: BOOST_CONCEPT_ASSERT(( boost::Convertible< - BOOST_DEDUCED_TYPENAME ForwardTraversal::traversal_category + typename trait::traversal_category , boost::forward_traversal_tag > )); }; @@ -159,9 +170,15 @@ BOOST_concept(BidirectionalTraversal,(Iterator)) : ForwardTraversal { + private: + template + struct trait { + typedef typename C::traversal_category traversal_category; + }; + public: BOOST_CONCEPT_ASSERT(( boost::Convertible< - BOOST_DEDUCED_TYPENAME BidirectionalTraversal::traversal_category + typename trait::traversal_category , boost::bidirectional_traversal_tag > )); @@ -177,9 +194,15 @@ BOOST_concept(RandomAccessTraversal,(Iterator)) : BidirectionalTraversal { + private: + template + struct trait { + typedef typename C::traversal_category traversal_category; + }; + public: BOOST_CONCEPT_ASSERT(( boost::Convertible< - BOOST_DEDUCED_TYPENAME RandomAccessTraversal::traversal_category + typename trait::traversal_category , boost::random_access_traversal_tag > )); Index: boost/config/compiler/nvcc.hpp =================================================================== --- boost/config/compiler/nvcc.hpp (revision 130) +++ boost/config/compiler/nvcc.hpp (revision 217) @@ -15,10 +15,17 @@ // BOOST_GPU_ENABLED : Flag a function or a method as being enabled on the host and device #define BOOST_GPU_ENABLED __host__ __device__ +// #ifndef __CUDA_ARCH__ +// #define BOOST_NO_DEDUCED_TYPENAME +// #warning BOOST_NO_DEDUCED_TYPENAME +// #else +// #warning !BOOST_NO_DEDUCED_TYPENAME +// #endif + // Boost support macro for NVCC // NVCC Basically behaves like some flavor of MSVC6 + some specific quirks -#define BOOST_NO_INCLASS_MEMBER_INITIALIZATION -#define BOOST_MSVC6_MEMBER_TEMPLATES +//#define BOOST_NO_INCLASS_MEMBER_INITIALIZATION +//#define BOOST_MSVC6_MEMBER_TEMPLATES #define BOOST_HAS_UNISTD_H #define BOOST_HAS_STDINT_H #define BOOST_HAS_SIGACTION Index: boost/concept_check.hpp =================================================================== --- boost/concept_check.hpp (revision 130) +++ boost/concept_check.hpp (revision 217) @@ -506,7 +506,7 @@ BOOST_CONCEPT_USAGE(ForwardIterator) { BOOST_CONCEPT_ASSERT((Convertible< - BOOST_DEDUCED_TYPENAME ForwardIterator::iterator_category + typename InputIterator::iterator_category , std::forward_iterator_tag >)); @@ -534,7 +534,7 @@ BOOST_CONCEPT_USAGE(BidirectionalIterator) { BOOST_CONCEPT_ASSERT((Convertible< - BOOST_DEDUCED_TYPENAME BidirectionalIterator::iterator_category + typename ForwardIterator::iterator_category , std::bidirectional_iterator_tag >)); @@ -638,7 +638,7 @@ BOOST_CONCEPT_USAGE(Mutable_Container) { BOOST_CONCEPT_ASSERT(( - Assignable)); + Assignable::value_type>)); BOOST_CONCEPT_ASSERT((InputIterator)); @@ -659,7 +659,7 @@ { BOOST_CONCEPT_ASSERT(( ForwardIterator< - typename ForwardContainer::const_iterator + typename Container::const_iterator >)); } }; @@ -668,11 +668,18 @@ : ForwardContainer , Mutable_Container { + private: + template + struct traits { + typedef typename C_::iterator iterator; + }; + typedef traits self; + public: BOOST_CONCEPT_USAGE(Mutable_ForwardContainer) { BOOST_CONCEPT_ASSERT(( Mutable_ForwardIterator< - typename Mutable_ForwardContainer::iterator + typename self::iterator >)); } }; @@ -688,7 +695,7 @@ { BOOST_CONCEPT_ASSERT(( BidirectionalIterator< - typename ReversibleContainer::const_iterator>)); + typename ForwardContainer::const_iterator>)); BOOST_CONCEPT_ASSERT((BidirectionalIterator)); @@ -732,7 +739,7 @@ { BOOST_CONCEPT_ASSERT(( RandomAccessIterator< - typename RandomAccessContainer::const_iterator + typename ReversibleContainer::const_iterator >)); const_constraints(c); @@ -753,7 +760,13 @@ , RandomAccessContainer { private: - typedef Mutable_RandomAccessContainer self; + template + struct traits { + typedef typename C_::iterator iterator; + typedef typename C_::reverse_iterator reverse_iterator; + typedef typename C_::reference reference; + }; + typedef traits self; public: BOOST_CONCEPT_USAGE(Mutable_RandomAccessContainer) { @@ -777,6 +790,14 @@ // ... so why aren't we following the standard? --DWA , DefaultConstructible { + private: + template + struct traits { + typedef typename S_::reference reference; + typedef typename S_::const_reference const_reference; + }; + typedef traits self; + public: BOOST_CONCEPT_USAGE(Sequence) { S @@ -791,7 +812,7 @@ c.erase(p); c.erase(p, q); - typename Sequence::reference r = c.front(); + typename self::reference r = c.front(); ignore_unused_variable_warning(c); ignore_unused_variable_warning(c2); @@ -801,7 +822,7 @@ } private: void const_constraints(const S& c) { - typename Sequence::const_reference r = c.front(); + typename self::const_reference r = c.front(); ignore_unused_variable_warning(r); } @@ -827,17 +848,25 @@ BOOST_concept(BackInsertionSequence,(S)) : Sequence { + private: + template + struct traits { + typedef typename S_::reference reference; + typedef typename S_::const_reference const_reference; + }; + typedef traits self; + public: BOOST_CONCEPT_USAGE(BackInsertionSequence) { c.push_back(t); c.pop_back(); - typename BackInsertionSequence::reference r = c.back(); + typename self::reference r = c.back(); ignore_unused_variable_warning(r); const_constraints(c); } private: void const_constraints(const S& cc) { - typename BackInsertionSequence::const_reference + typename self::const_reference r = cc.back(); ignore_unused_variable_warning(r); }; @@ -849,6 +878,13 @@ : ForwardContainer , DefaultConstructible { + private: + template + struct traits { + typedef typename S_::value_type value_type; + }; + typedef traits self; + public: typedef typename C::key_type key_type; typedef typename C::key_compare key_compare; typedef typename C::value_compare value_compare; @@ -864,7 +900,7 @@ const_constraints(c); BOOST_CONCEPT_ASSERT((BinaryPredicate)); - typedef typename AssociativeContainer::value_type value_type_; + typedef typename self::value_type value_type_; BOOST_CONCEPT_ASSERT((BinaryPredicate)); }