diff --git a/include/boost/tuple/detail/tuple_basic.hpp b/include/boost/tuple/detail/tuple_basic.hpp index 1bf5966..5f019e6 100644 --- a/include/boost/tuple/detail/tuple_basic.hpp +++ b/include/boost/tuple/detail/tuple_basic.hpp @@ -43,6 +43,8 @@ #include "boost/type_traits/cv_traits.hpp" #include "boost/type_traits/function_traits.hpp" +#include "boost/detail/workaround.hpp" // needed for BOOST_WORKAROUND + namespace boost { namespace tuples { @@ -97,12 +99,22 @@ struct get_class { template inline static RET get(const cons& t) { +#if BOOST_WORKAROUND(__IBMCPP__,==600) + // vacpp 6.0 is not very consistent regarding the member template keyword + // Here it generates an error when the template keyword is used. + return get_class::get(t.tail); +#else return get_class::BOOST_NESTED_TEMPLATE get(t.tail); +#endif } template inline static RET get(cons& t) { +#if BOOST_WORKAROUND(__IBMCPP__,==600) + return get_class::get(t.tail); +#else return get_class::BOOST_NESTED_TEMPLATE get(t.tail); +#endif } }; @@ -194,11 +206,17 @@ inline typename access_traits< typename element >::type >::non_const_type get(cons& c BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int, N)) { - return detail::get_class::BOOST_NESTED_TEMPLATE +#if BOOST_WORKAROUND(__IBMCPP__,==600 ) + return get_class:: +#else + return get_class::BOOST_NESTED_TEMPLATE +#endif get< typename access_traits< typename element >::type - >::non_const_type>(c); + >::non_const_type, + HT,TT + >(c); } // get function for const cons-lists, returns a const reference to @@ -209,11 +227,17 @@ inline typename access_traits< typename element >::type >::const_type get(const cons& c BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int, N)) { +#if BOOST_WORKAROUND(__IBMCPP__,==600) + return detail::get_class:: +#else return detail::get_class::BOOST_NESTED_TEMPLATE +#endif get< typename access_traits< typename element >::type - >::const_type>(c); + >::const_type, + HT,TT + >(c); } // -- the cons template --------------------------------------------------