forked from boostorg/detail
fixed for borland
[SVN r9508]
This commit is contained in:
@@ -8,6 +8,9 @@
|
|||||||
#define BOOST_DETAIL_NAMED_TEMPLATE_PARAMS_HPP
|
#define BOOST_DETAIL_NAMED_TEMPLATE_PARAMS_HPP
|
||||||
|
|
||||||
#include <boost/type_traits/conversion_traits.hpp>
|
#include <boost/type_traits/conversion_traits.hpp>
|
||||||
|
#if defined(__BORLANDC__)
|
||||||
|
#include <boost/type_traits/ice.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
@@ -26,8 +29,14 @@ namespace boost {
|
|||||||
typedef detail::dummy_default_gen type;
|
typedef detail::dummy_default_gen type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T> struct is_default { enum { value = false }; };
|
template <class T> struct is_default {
|
||||||
template <> struct is_default<default_argument> { enum { value = true }; };
|
enum { value = false };
|
||||||
|
typedef type_traits::no_type type;
|
||||||
|
};
|
||||||
|
template <> struct is_default<default_argument> {
|
||||||
|
enum { value = true };
|
||||||
|
typedef type_traits::yes_type type;
|
||||||
|
};
|
||||||
|
|
||||||
struct choose_default {
|
struct choose_default {
|
||||||
template <class Arg, class DefaultGen, class Base, class Traits>
|
template <class Arg, class DefaultGen, class Base, class Traits>
|
||||||
@@ -42,17 +51,33 @@ namespace boost {
|
|||||||
typedef Arg type;
|
typedef Arg type;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(__BORLANDC__)
|
||||||
|
template <class UseDefault>
|
||||||
|
struct choose_arg_or_default { typedef choose_arg type; };
|
||||||
|
template <>
|
||||||
|
struct choose_arg_or_default<type_traits::yes_type> {
|
||||||
|
typedef choose_default type;
|
||||||
|
};
|
||||||
|
#else
|
||||||
template <bool UseDefault>
|
template <bool UseDefault>
|
||||||
struct choose_arg_or_default { typedef choose_arg type; };
|
struct choose_arg_or_default { typedef choose_arg type; };
|
||||||
template <>
|
template <>
|
||||||
struct choose_arg_or_default<true> {
|
struct choose_arg_or_default<true> {
|
||||||
typedef choose_default type;
|
typedef choose_default type;
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
template <class Arg, class DefaultGen, class Base, class Traits>
|
template <class Arg, class DefaultGen, class Base, class Traits>
|
||||||
class resolve_default {
|
class resolve_default {
|
||||||
|
#if defined(__BORLANDC__)
|
||||||
|
typedef typename choose_arg_or_default<typename is_default<Arg>::type>::type Selector;
|
||||||
|
#else
|
||||||
|
// This usually works for Borland, but I'm seeing weird errors in
|
||||||
|
// iterator_adaptor_test.cpp when using this method.
|
||||||
enum { is_def = is_default<Arg>::value };
|
enum { is_def = is_default<Arg>::value };
|
||||||
typedef typename choose_arg_or_default<is_def>::type Selector;
|
typedef typename choose_arg_or_default<is_def>::type Selector;
|
||||||
|
#endif
|
||||||
public:
|
public:
|
||||||
typedef typename Selector
|
typedef typename Selector
|
||||||
::template bind<Arg, DefaultGen, Base, Traits>::type type;
|
::template bind<Arg, DefaultGen, Base, Traits>::type type;
|
||||||
@@ -75,6 +100,7 @@ namespace boost {
|
|||||||
typedef detail::default_argument type;
|
typedef detail::default_argument type;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
template <bool Named> struct choose_default_dispatch { };
|
template <bool Named> struct choose_default_dispatch { };
|
||||||
template <> struct choose_default_dispatch<true> {
|
template <> struct choose_default_dispatch<true> {
|
||||||
typedef choose_named_params type;
|
typedef choose_named_params type;
|
||||||
@@ -83,6 +109,7 @@ namespace boost {
|
|||||||
typedef choose_default_arg type;
|
typedef choose_default_arg type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template <class PreviousArg>
|
template <class PreviousArg>
|
||||||
struct choose_default_argument {
|
struct choose_default_argument {
|
||||||
enum { is_named = is_named_param_list<PreviousArg>::value };
|
enum { is_named = is_named_param_list<PreviousArg>::value };
|
||||||
|
Reference in New Issue
Block a user