diff --git a/include/boost/python/detail/arg_tuple_size.hpp b/include/boost/python/detail/arg_tuple_size.hpp index e6b6ccc1..a330a939 100644 --- a/include/boost/python/detail/arg_tuple_size.hpp +++ b/include/boost/python/detail/arg_tuple_size.hpp @@ -99,6 +99,122 @@ struct arg_tuple_size BOOST_STATIC_CONSTANT(std::size_t, value = 6); }; + +// Metrowerks thinks this creates ambiguities +# if !defined(__MWERKS__) || __MWERKS__ > 0x2406 + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 1); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 2); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 3); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 4); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 5); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 6); +}; + + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 1); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 2); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 3); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 4); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 5); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 6); +}; + + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 1); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 2); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 3); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 4); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 5); +}; + +template +struct arg_tuple_size +{ + BOOST_STATIC_CONSTANT(std::size_t, value = 6); +}; + + +# endif // __MWERKS__ # else // We will use the "sizeof() trick" to work around the lack of diff --git a/src/gen_arg_tuple_size.py b/src/gen_arg_tuple_size.py index 68e379cb..5edd3286 100644 --- a/src/gen_arg_tuple_size.py +++ b/src/gen_arg_tuple_size.py @@ -21,6 +21,15 @@ header = '''// (C) Copyright David Abrahams 2001. Permission to copy, use, modi _cv_qualifiers = ('', ' const', ' volatile', ' const volatile') +_suffix = { + '': ''' +// Metrowerks thinks this creates ambiguities +# if !defined(__MWERKS__) || __MWERKS__ > 0x2406 +''', ' const volatile': ''' +# endif // __MWERKS__ +''' + }; + def gen_arg_tuple_size(member_function_args, free_function_args = None): if free_function_args is None: free_function_args = member_function_args + 1 @@ -53,14 +62,20 @@ struct arg_tuple_size ''', free_function_args) + '\n' - + gen_functions( + + + reduce(lambda x,y: x+'\n'+y + , map( + lambda cv: gen_functions( '''template struct arg_tuple_size { BOOST_STATIC_CONSTANT(std::size_t, value = %+); }; -''', member_function_args, '') +''' + , member_function_args, cv) + _suffix.get(cv, '') + , _cv_qualifiers)) + + '''# else