Added BOOST_HAS_FACET macro

[SVN r23454]
This commit is contained in:
Douglas Gregor
2004-07-12 03:12:39 +00:00
parent efe60bb2d1
commit 17e578ef53

View File

@@ -326,27 +326,33 @@ namespace std {
# define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment # define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment
# endif # endif
// BOOST_USE_FACET workaround ----------------------------------------------// // BOOST_USE_FACET / HAS_FACET workaround ----------------------------------//
// When the standard library does not have a conforming std::use_facet there // When the standard library does not have a conforming std::use_facet there
// are various workarounds available, but they differ from library to library. // are various workarounds available, but they differ from library to library.
// This macro provides a consistent way to access a locale's facets. // The same problem occurs with has_facet.
// These macros provide a consistent way to access a locale's facets.
// Usage: // Usage:
// replace // replace
// std::use_facet<Type>(loc); // std::use_facet<Type>(loc);
// with // with
// BOOST_USE_FACET(Type, loc); // BOOST_USE_FACET(Type, loc);
// Note do not add a std:: prefix to the front of BOOST_USE_FACET! // Note do not add a std:: prefix to the front of BOOST_USE_FACET!
// Use for BOOST_HAS_FACET is analagous.
#if defined(BOOST_NO_STD_USE_FACET) #if defined(BOOST_NO_STD_USE_FACET)
# ifdef BOOST_HAS_TWO_ARG_USE_FACET # ifdef BOOST_HAS_TWO_ARG_USE_FACET
# define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast<Type*>(0)) # define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast<Type*>(0))
# define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast<Type*>(0))
# elif defined(BOOST_HAS_MACRO_USE_FACET) # elif defined(BOOST_HAS_MACRO_USE_FACET)
# define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type) # define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type)
# define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type)
# elif defined(BOOST_HAS_STLP_USE_FACET) # elif defined(BOOST_HAS_STLP_USE_FACET)
# define BOOST_USE_FACET(Type, loc) (*std::_Use_facet<Type >(loc)) # define BOOST_USE_FACET(Type, loc) (*std::_Use_facet<Type >(loc))
# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
# endif # endif
#else #else
# define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc) # define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc)
# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
#endif #endif
// BOOST_NESTED_TEMPLATE workaround ------------------------------------------// // BOOST_NESTED_TEMPLATE workaround ------------------------------------------//