Removed external templates for unknown compilers.

Fixed std conformance bugs in v4 code (shown up by metrowerks compiler).


[SVN r18467]
This commit is contained in:
John Maddock
2003-05-20 11:28:47 +00:00
parent 8bb6861595
commit 31d1dc1182
3 changed files with 12 additions and 29 deletions

View File

@ -57,41 +57,23 @@ template class BOOST_REGEX_DECL reg_expression< BOOST_REGEX_CHAR_T >;
#pragma option pop
#elif defined(BOOST_MSVC)
#elif defined(BOOST_MSVC) || defined(__GNUC__)
# ifndef BOOST_REGEX_INSTANTIATE
# define template extern template
# endif
#pragma warning(push)
#pragma warning(disable : 4251 4231 4660)
# ifdef BOOST_MSVC
# pragma warning(push)
# pragma warning(disable : 4251 4231 4660)
# endif
template class BOOST_REGEX_DECL reg_expression< BOOST_REGEX_CHAR_T >;
#pragma warning(pop)
# ifdef template
# undef template
# ifdef BOOST_MSVC
# pragma warning(pop)
# endif
#elif !defined(BOOST_REGEX_HAS_DLL_RUNTIME)
//
// for each [member] function declare a full specialisation of that
// [member] function, then instantiate it in one translation unit.
// This is not guarenteed to work according to the standard, but in
// practice it should work for all compilers (unless they use a realy
// perverse name mangling convention). Unfortunately this approach
// does *not* work for Win32 style import/export, because that can
// alter the class layout.
//
# ifndef BOOST_REGEX_INSTANTIATE
# define template template<>
# endif
template unsigned int BOOST_REGEX_CALL reg_expression<BOOST_REGEX_CHAR_T>::set_expression(const BOOST_REGEX_CHAR_T* p, const BOOST_REGEX_CHAR_T* end, reg_expression<BOOST_REGEX_CHAR_T>::flag_type f);
# ifdef template
# undef template
# endif

View File

@ -123,6 +123,7 @@ using regex_constants::match_nosubs;
using regex_constants::format_all;
using regex_constants::format_sed;
using regex_constants::format_perl;
using regex_constants::format_default;
using regex_constants::format_no_copy;
using regex_constants::format_first_only;
//using regex_constants::format_is_if;

View File

@ -51,16 +51,16 @@ struct sub_match : public std::pair<BidiIterator, BidiIterator>
}
difference_type BOOST_REGEX_CALL length()const
{
difference_type n = boost::re_detail::distance((BidiIterator)first, (BidiIterator)second);
difference_type n = boost::re_detail::distance((BidiIterator)this->first, (BidiIterator)this->second);
return n;
}
std::basic_string<value_type> str()const
{
std::basic_string<value_type> result;
std::size_t len = boost::re_detail::distance((BidiIterator)first, (BidiIterator)second);
std::size_t len = boost::re_detail::distance((BidiIterator)this->first, (BidiIterator)this->second);
result.reserve(len);
BidiIterator i = first;
while(i != second)
BidiIterator i = this->first;
while(i != this->second)
{
result.append(1, *i);
++i;