os/ossrv/ossrv_pub/boost_apis/boost/regex/concepts.hpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
/*
sl@0
     2
 *
sl@0
     3
 * Copyright (c) 2004
sl@0
     4
 * John Maddock
sl@0
     5
 *
sl@0
     6
 * Use, modification and distribution are subject to the 
sl@0
     7
 * Boost Software License, Version 1.0. (See accompanying file 
sl@0
     8
 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
sl@0
     9
 *
sl@0
    10
 */
sl@0
    11
 
sl@0
    12
 /*
sl@0
    13
  *   LOCATION:    see http://www.boost.org for most recent version.
sl@0
    14
  *   FILE         concepts.hpp
sl@0
    15
  *   VERSION      see <boost/version.hpp>
sl@0
    16
  *   DESCRIPTION: Declares regular expression concepts.
sl@0
    17
  */
sl@0
    18
sl@0
    19
#ifndef BOOST_REGEX_CONCEPTS_HPP_INCLUDED
sl@0
    20
#define BOOST_REGEX_CONCEPTS_HPP_INCLUDED
sl@0
    21
sl@0
    22
#include <boost/concept_archetype.hpp>
sl@0
    23
#include <boost/concept_check.hpp>
sl@0
    24
#include <boost/type_traits/is_enum.hpp>
sl@0
    25
#include <boost/type_traits/is_base_and_derived.hpp>
sl@0
    26
#include <boost/static_assert.hpp>
sl@0
    27
#ifndef BOOST_TEST_TR1_REGEX
sl@0
    28
#include <boost/regex.hpp>
sl@0
    29
#endif
sl@0
    30
#include <bitset>
sl@0
    31
#include <vector>
sl@0
    32
#include <iostream>
sl@0
    33
sl@0
    34
namespace boost{
sl@0
    35
sl@0
    36
//
sl@0
    37
// bitmask_archetype:
sl@0
    38
// this can be either an integer type, an enum, or a std::bitset,
sl@0
    39
// we use the latter as the architype as it offers the "strictest"
sl@0
    40
// of the possible interfaces:
sl@0
    41
//
sl@0
    42
typedef std::bitset<512> bitmask_archetype;
sl@0
    43
//
sl@0
    44
// char_architype:
sl@0
    45
// A strict model for the character type interface.
sl@0
    46
//
sl@0
    47
struct char_architype
sl@0
    48
{
sl@0
    49
   // default constructable:
sl@0
    50
   char_architype();
sl@0
    51
   // copy constructable / assignable:
sl@0
    52
   char_architype(const char_architype&);
sl@0
    53
   char_architype& operator=(const char_architype&);
sl@0
    54
   // constructable from an integral value:
sl@0
    55
   char_architype(unsigned long val);
sl@0
    56
   // comparable:
sl@0
    57
   bool operator==(const char_architype&)const;
sl@0
    58
   bool operator!=(const char_architype&)const;
sl@0
    59
   bool operator<(const char_architype&)const;
sl@0
    60
   bool operator<=(const char_architype&)const;
sl@0
    61
   bool operator>=(const char_architype&)const;
sl@0
    62
   bool operator>(const char_architype&)const;
sl@0
    63
   // conversion to integral type:
sl@0
    64
   operator long()const;
sl@0
    65
};
sl@0
    66
//
sl@0
    67
// char_architype can not be used with basic_string:
sl@0
    68
//
sl@0
    69
} // namespace boost
sl@0
    70
namespace std{
sl@0
    71
   template<> struct char_traits<boost::char_architype>
sl@0
    72
   {
sl@0
    73
      // The intent is that this template is not instantiated,
sl@0
    74
      // but this typedef gives us a chance of compilation in
sl@0
    75
      // case it is:
sl@0
    76
      typedef boost::char_architype char_type;
sl@0
    77
   };
sl@0
    78
}
sl@0
    79
namespace boost{
sl@0
    80
//
sl@0
    81
// regex_traits_architype:
sl@0
    82
// A strict interpretation of the regular expression traits class requirements.
sl@0
    83
//
sl@0
    84
template <class charT>
sl@0
    85
struct regex_traits_architype
sl@0
    86
{
sl@0
    87
public:
sl@0
    88
   regex_traits_architype();
sl@0
    89
   typedef charT char_type;
sl@0
    90
   typedef std::size_t size_type;
sl@0
    91
   typedef std::vector<char_type> string_type;
sl@0
    92
   typedef copy_constructible_archetype<assignable_archetype<> > locale_type;
sl@0
    93
   typedef bitmask_archetype char_class_type;
sl@0
    94
sl@0
    95
   static size_type length(const char_type* ) { return 0; }
sl@0
    96
sl@0
    97
   charT translate(charT ) const { return charT(); }
sl@0
    98
   charT translate_nocase(charT ) const { return static_object<charT>::get(); }
sl@0
    99
sl@0
   100
   template <class ForwardIterator>
sl@0
   101
   string_type transform(ForwardIterator , ForwardIterator ) const
sl@0
   102
   { return static_object<string_type>::get(); }
sl@0
   103
   template <class ForwardIterator>
sl@0
   104
   string_type transform_primary(ForwardIterator , ForwardIterator ) const
sl@0
   105
   { return static_object<string_type>::get(); }
sl@0
   106
sl@0
   107
   template <class ForwardIterator>
sl@0
   108
   char_class_type lookup_classname(ForwardIterator , ForwardIterator ) const
sl@0
   109
   { return static_object<char_class_type>::get(); }
sl@0
   110
   template <class ForwardIterator>
sl@0
   111
   string_type lookup_collatename(ForwardIterator , ForwardIterator ) const
sl@0
   112
   { return static_object<string_type>::get(); }
sl@0
   113
sl@0
   114
   bool isctype(charT, char_class_type) const
sl@0
   115
   { return false; }
sl@0
   116
   int value(charT, int) const
sl@0
   117
   { return 0; }
sl@0
   118
sl@0
   119
   locale_type imbue(locale_type l)
sl@0
   120
   { return l; }
sl@0
   121
   locale_type getloc()const
sl@0
   122
   { return static_object<locale_type>::get(); }
sl@0
   123
sl@0
   124
private:
sl@0
   125
   // this type is not copyable:
sl@0
   126
   regex_traits_architype(const regex_traits_architype&);
sl@0
   127
   regex_traits_architype& operator=(const regex_traits_architype&);
sl@0
   128
};
sl@0
   129
sl@0
   130
//
sl@0
   131
// alter this to std::tr1, to test a std implementation:
sl@0
   132
//
sl@0
   133
#ifndef BOOST_TEST_TR1_REGEX
sl@0
   134
namespace global_regex_namespace = ::boost;
sl@0
   135
#else
sl@0
   136
namespace global_regex_namespace = ::std::tr1;
sl@0
   137
#endif
sl@0
   138
sl@0
   139
template <class Bitmask>
sl@0
   140
struct BitmaskConcept
sl@0
   141
{
sl@0
   142
   void constraints() 
sl@0
   143
   {
sl@0
   144
      function_requires<CopyConstructibleConcept<Bitmask> >();
sl@0
   145
      function_requires<AssignableConcept<Bitmask> >();
sl@0
   146
sl@0
   147
      m_mask1 = m_mask2 | m_mask3;
sl@0
   148
      m_mask1 = m_mask2 & m_mask3;
sl@0
   149
      m_mask1 = m_mask2 ^ m_mask3;
sl@0
   150
sl@0
   151
      m_mask1 = ~m_mask2;
sl@0
   152
sl@0
   153
      m_mask1 |= m_mask2;
sl@0
   154
      m_mask1 &= m_mask2;
sl@0
   155
      m_mask1 ^= m_mask2;
sl@0
   156
   }
sl@0
   157
   Bitmask m_mask1, m_mask2, m_mask3;
sl@0
   158
};
sl@0
   159
sl@0
   160
template <class traits>
sl@0
   161
struct RegexTraitsConcept
sl@0
   162
{
sl@0
   163
   RegexTraitsConcept();
sl@0
   164
   // required typedefs:
sl@0
   165
   typedef typename traits::char_type char_type;
sl@0
   166
   typedef typename traits::size_type size_type;
sl@0
   167
   typedef typename traits::string_type string_type;
sl@0
   168
   typedef typename traits::locale_type locale_type;
sl@0
   169
   typedef typename traits::char_class_type char_class_type;
sl@0
   170
sl@0
   171
   void constraints() 
sl@0
   172
   {
sl@0
   173
      function_requires<UnsignedIntegerConcept<size_type> >();
sl@0
   174
      function_requires<RandomAccessContainerConcept<string_type> >();
sl@0
   175
      function_requires<DefaultConstructibleConcept<locale_type> >();
sl@0
   176
      function_requires<CopyConstructibleConcept<locale_type> >();
sl@0
   177
      function_requires<AssignableConcept<locale_type> >();
sl@0
   178
      function_requires<BitmaskConcept<char_class_type> >();
sl@0
   179
sl@0
   180
      size_type n = traits::length(m_pointer);
sl@0
   181
      ignore_unused_variable_warning(n);
sl@0
   182
sl@0
   183
      char_type c = m_ctraits.translate(m_char);
sl@0
   184
      ignore_unused_variable_warning(c);
sl@0
   185
      c = m_ctraits.translate_nocase(m_char);
sl@0
   186
      
sl@0
   187
      //string_type::foobar bar;
sl@0
   188
      string_type s1 = m_ctraits.transform(m_pointer, m_pointer);
sl@0
   189
      ignore_unused_variable_warning(s1);
sl@0
   190
sl@0
   191
      string_type s2 = m_ctraits.transform_primary(m_pointer, m_pointer);
sl@0
   192
      ignore_unused_variable_warning(s2);
sl@0
   193
sl@0
   194
      char_class_type cc = m_ctraits.lookup_classname(m_pointer, m_pointer);
sl@0
   195
      ignore_unused_variable_warning(cc);
sl@0
   196
sl@0
   197
      string_type s3 = m_ctraits.lookup_collatename(m_pointer, m_pointer);
sl@0
   198
      ignore_unused_variable_warning(s3);
sl@0
   199
sl@0
   200
      bool b = m_ctraits.isctype(m_char, cc);
sl@0
   201
      ignore_unused_variable_warning(b);
sl@0
   202
sl@0
   203
      int v = m_ctraits.value(m_char, 16);
sl@0
   204
      ignore_unused_variable_warning(v);
sl@0
   205
sl@0
   206
      locale_type l(m_ctraits.getloc());
sl@0
   207
      m_traits.imbue(l);
sl@0
   208
      ignore_unused_variable_warning(l);
sl@0
   209
   }
sl@0
   210
   traits m_traits;
sl@0
   211
   const traits m_ctraits;
sl@0
   212
   const char_type* m_pointer;
sl@0
   213
   char_type m_char;
sl@0
   214
private:
sl@0
   215
   RegexTraitsConcept& operator=(RegexTraitsConcept&);
sl@0
   216
};
sl@0
   217
sl@0
   218
//
sl@0
   219
// helper class to compute what traits class a regular expression type is using:
sl@0
   220
//
sl@0
   221
template <class Regex>
sl@0
   222
struct regex_traits_computer;
sl@0
   223
sl@0
   224
template <class charT, class traits>
sl@0
   225
struct regex_traits_computer< global_regex_namespace::basic_regex<charT, traits> >
sl@0
   226
{
sl@0
   227
   typedef traits type;
sl@0
   228
};
sl@0
   229
sl@0
   230
//
sl@0
   231
// BaseRegexConcept does not test anything dependent on basic_string,
sl@0
   232
// in case our charT does not have an associated char_traits:
sl@0
   233
//
sl@0
   234
template <class Regex>
sl@0
   235
struct BaseRegexConcept
sl@0
   236
{
sl@0
   237
   typedef typename Regex::value_type value_type;
sl@0
   238
   typedef typename Regex::size_type size_type;
sl@0
   239
   typedef typename Regex::flag_type flag_type;
sl@0
   240
   typedef typename Regex::locale_type locale_type;
sl@0
   241
   typedef input_iterator_archetype<value_type> input_iterator_type;
sl@0
   242
sl@0
   243
   // derived test types:
sl@0
   244
   typedef const value_type* pointer_type;
sl@0
   245
   typedef bidirectional_iterator_archetype<value_type> BidiIterator;
sl@0
   246
   typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type;
sl@0
   247
   typedef global_regex_namespace::match_results<BidiIterator> match_results_type;
sl@0
   248
   typedef output_iterator_archetype<value_type> OutIterator;
sl@0
   249
   typedef typename regex_traits_computer<Regex>::type traits_type;
sl@0
   250
   typedef global_regex_namespace::regex_iterator<BidiIterator, value_type, traits_type> regex_iterator_type;
sl@0
   251
   typedef global_regex_namespace::regex_token_iterator<BidiIterator, value_type, traits_type> regex_token_iterator_type;
sl@0
   252
sl@0
   253
   void global_constraints()
sl@0
   254
   {
sl@0
   255
      //
sl@0
   256
      // test non-template components:
sl@0
   257
      //
sl@0
   258
      function_requires<BitmaskConcept<global_regex_namespace::regex_constants::syntax_option_type> >();
sl@0
   259
      global_regex_namespace::regex_constants::syntax_option_type opts
sl@0
   260
         = global_regex_namespace::regex_constants::icase
sl@0
   261
         | global_regex_namespace::regex_constants::nosubs
sl@0
   262
         | global_regex_namespace::regex_constants::optimize
sl@0
   263
         | global_regex_namespace::regex_constants::collate
sl@0
   264
         | global_regex_namespace::regex_constants::ECMAScript
sl@0
   265
         | global_regex_namespace::regex_constants::basic
sl@0
   266
         | global_regex_namespace::regex_constants::extended
sl@0
   267
         | global_regex_namespace::regex_constants::awk
sl@0
   268
         | global_regex_namespace::regex_constants::grep
sl@0
   269
         | global_regex_namespace::regex_constants::egrep;
sl@0
   270
      ignore_unused_variable_warning(opts);
sl@0
   271
sl@0
   272
      function_requires<BitmaskConcept<global_regex_namespace::regex_constants::match_flag_type> >();
sl@0
   273
      global_regex_namespace::regex_constants::match_flag_type mopts
sl@0
   274
         = global_regex_namespace::regex_constants::match_default
sl@0
   275
         | global_regex_namespace::regex_constants::match_not_bol
sl@0
   276
         | global_regex_namespace::regex_constants::match_not_eol
sl@0
   277
         | global_regex_namespace::regex_constants::match_not_bow
sl@0
   278
         | global_regex_namespace::regex_constants::match_not_eow
sl@0
   279
         | global_regex_namespace::regex_constants::match_any
sl@0
   280
         | global_regex_namespace::regex_constants::match_not_null
sl@0
   281
         | global_regex_namespace::regex_constants::match_continuous
sl@0
   282
         | global_regex_namespace::regex_constants::match_prev_avail
sl@0
   283
         | global_regex_namespace::regex_constants::format_default
sl@0
   284
         | global_regex_namespace::regex_constants::format_sed
sl@0
   285
         | global_regex_namespace::regex_constants::format_no_copy
sl@0
   286
         | global_regex_namespace::regex_constants::format_first_only;
sl@0
   287
      ignore_unused_variable_warning(mopts);
sl@0
   288
sl@0
   289
      BOOST_STATIC_ASSERT((::boost::is_enum<global_regex_namespace::regex_constants::error_type>::value));
sl@0
   290
      global_regex_namespace::regex_constants::error_type e1 = global_regex_namespace::regex_constants::error_collate;
sl@0
   291
      ignore_unused_variable_warning(e1);
sl@0
   292
      e1 = global_regex_namespace::regex_constants::error_ctype;
sl@0
   293
      ignore_unused_variable_warning(e1);
sl@0
   294
      e1 = global_regex_namespace::regex_constants::error_escape;
sl@0
   295
      ignore_unused_variable_warning(e1);
sl@0
   296
      e1 = global_regex_namespace::regex_constants::error_backref;
sl@0
   297
      ignore_unused_variable_warning(e1);
sl@0
   298
      e1 = global_regex_namespace::regex_constants::error_brack;
sl@0
   299
      ignore_unused_variable_warning(e1);
sl@0
   300
      e1 = global_regex_namespace::regex_constants::error_paren;
sl@0
   301
      ignore_unused_variable_warning(e1);
sl@0
   302
      e1 = global_regex_namespace::regex_constants::error_brace;
sl@0
   303
      ignore_unused_variable_warning(e1);
sl@0
   304
      e1 = global_regex_namespace::regex_constants::error_badbrace;
sl@0
   305
      ignore_unused_variable_warning(e1);
sl@0
   306
      e1 = global_regex_namespace::regex_constants::error_range;
sl@0
   307
      ignore_unused_variable_warning(e1);
sl@0
   308
      e1 = global_regex_namespace::regex_constants::error_space;
sl@0
   309
      ignore_unused_variable_warning(e1);
sl@0
   310
      e1 = global_regex_namespace::regex_constants::error_badrepeat;
sl@0
   311
      ignore_unused_variable_warning(e1);
sl@0
   312
      e1 = global_regex_namespace::regex_constants::error_complexity;
sl@0
   313
      ignore_unused_variable_warning(e1);
sl@0
   314
      e1 = global_regex_namespace::regex_constants::error_stack;
sl@0
   315
      ignore_unused_variable_warning(e1);
sl@0
   316
sl@0
   317
      BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::runtime_error, global_regex_namespace::regex_error>::value  ));
sl@0
   318
      const global_regex_namespace::regex_error except(e1);
sl@0
   319
      e1 = except.code();
sl@0
   320
sl@0
   321
      typedef typename Regex::value_type value_type;
sl@0
   322
      function_requires< RegexTraitsConcept<global_regex_namespace::regex_traits<char> > >();
sl@0
   323
      function_requires< BaseRegexConcept<global_regex_namespace::basic_regex<char> > >();
sl@0
   324
   }
sl@0
   325
   void constraints() 
sl@0
   326
   {
sl@0
   327
      global_constraints();
sl@0
   328
sl@0
   329
      BOOST_STATIC_ASSERT((::boost::is_same< flag_type, global_regex_namespace::regex_constants::syntax_option_type>::value));
sl@0
   330
      flag_type opts
sl@0
   331
         = Regex::icase
sl@0
   332
         | Regex::nosubs
sl@0
   333
         | Regex::optimize
sl@0
   334
         | Regex::collate
sl@0
   335
         | Regex::ECMAScript
sl@0
   336
         | Regex::basic
sl@0
   337
         | Regex::extended
sl@0
   338
         | Regex::awk
sl@0
   339
         | Regex::grep
sl@0
   340
         | Regex::egrep;
sl@0
   341
      ignore_unused_variable_warning(opts);
sl@0
   342
sl@0
   343
      function_requires<DefaultConstructibleConcept<Regex> >();
sl@0
   344
      function_requires<CopyConstructibleConcept<Regex> >();
sl@0
   345
sl@0
   346
      // Regex constructors:
sl@0
   347
      Regex e1(m_pointer);
sl@0
   348
      ignore_unused_variable_warning(e1);
sl@0
   349
      Regex e2(m_pointer, m_flags);
sl@0
   350
      ignore_unused_variable_warning(e2);
sl@0
   351
      Regex e3(m_pointer, m_size, m_flags);
sl@0
   352
      ignore_unused_variable_warning(e3);
sl@0
   353
      Regex e4(in1, in2);
sl@0
   354
      ignore_unused_variable_warning(e4);
sl@0
   355
      Regex e5(in1, in2, m_flags);
sl@0
   356
      ignore_unused_variable_warning(e5);
sl@0
   357
sl@0
   358
      // assign etc:
sl@0
   359
      Regex e;
sl@0
   360
      e = m_pointer;
sl@0
   361
      e = e1;
sl@0
   362
      e.assign(e1);
sl@0
   363
      e.assign(m_pointer);
sl@0
   364
      e.assign(m_pointer, m_flags);
sl@0
   365
      e.assign(m_pointer, m_size, m_flags);
sl@0
   366
      e.assign(in1, in2);
sl@0
   367
      e.assign(in1, in2, m_flags);
sl@0
   368
sl@0
   369
      // access:
sl@0
   370
      const Regex ce;
sl@0
   371
      bool b = ce.empty();
sl@0
   372
      ignore_unused_variable_warning(b);
sl@0
   373
      size_type i = ce.mark_count();
sl@0
   374
      ignore_unused_variable_warning(i);
sl@0
   375
      m_flags = ce.flags();
sl@0
   376
      e.imbue(ce.getloc());
sl@0
   377
      e.swap(e1);
sl@0
   378
      
sl@0
   379
      global_regex_namespace::swap(e, e1);
sl@0
   380
sl@0
   381
      // sub_match:
sl@0
   382
      BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::pair<BidiIterator, BidiIterator>, sub_match_type>::value));
sl@0
   383
      typedef typename sub_match_type::value_type sub_value_type;
sl@0
   384
      typedef typename sub_match_type::difference_type sub_diff_type;
sl@0
   385
      typedef typename sub_match_type::iterator sub_iter_type;
sl@0
   386
      BOOST_STATIC_ASSERT((::boost::is_same<sub_value_type, value_type>::value));
sl@0
   387
      BOOST_STATIC_ASSERT((::boost::is_same<sub_iter_type, BidiIterator>::value));
sl@0
   388
      b = m_sub.matched;
sl@0
   389
      ignore_unused_variable_warning(b);
sl@0
   390
      BidiIterator bi = m_sub.first;
sl@0
   391
      ignore_unused_variable_warning(bi);
sl@0
   392
      bi = m_sub.second;
sl@0
   393
      ignore_unused_variable_warning(bi);
sl@0
   394
      sub_diff_type diff = m_sub.length();
sl@0
   395
      ignore_unused_variable_warning(diff);
sl@0
   396
      // match_results tests:
sl@0
   397
      typedef typename match_results_type::value_type mr_value_type;
sl@0
   398
      typedef typename match_results_type::const_reference mr_const_reference;
sl@0
   399
      typedef typename match_results_type::reference mr_reference;
sl@0
   400
      typedef typename match_results_type::const_iterator mr_const_iterator;
sl@0
   401
      typedef typename match_results_type::iterator mr_iterator;
sl@0
   402
      typedef typename match_results_type::difference_type mr_difference_type;
sl@0
   403
      typedef typename match_results_type::size_type mr_size_type;
sl@0
   404
      typedef typename match_results_type::allocator_type mr_allocator_type;
sl@0
   405
      typedef typename match_results_type::char_type mr_char_type;
sl@0
   406
      typedef typename match_results_type::string_type mr_string_type;
sl@0
   407
sl@0
   408
      match_results_type m1;
sl@0
   409
      mr_allocator_type at;
sl@0
   410
      match_results_type m2(at);
sl@0
   411
      match_results_type m3(m1);
sl@0
   412
      m1 = m2;
sl@0
   413
sl@0
   414
      int ival = 0;
sl@0
   415
sl@0
   416
      mr_size_type mrs = m_cresults.size();
sl@0
   417
      ignore_unused_variable_warning(mrs);
sl@0
   418
      mrs = m_cresults.max_size();
sl@0
   419
      ignore_unused_variable_warning(mrs);
sl@0
   420
      b = m_cresults.empty();
sl@0
   421
      ignore_unused_variable_warning(b);
sl@0
   422
      mr_difference_type mrd = m_cresults.length();
sl@0
   423
      ignore_unused_variable_warning(mrd);
sl@0
   424
      mrd = m_cresults.length(ival);
sl@0
   425
      ignore_unused_variable_warning(mrd);
sl@0
   426
      mrd = m_cresults.position();
sl@0
   427
      ignore_unused_variable_warning(mrd);
sl@0
   428
      mrd = m_cresults.position(mrs);
sl@0
   429
      ignore_unused_variable_warning(mrd);
sl@0
   430
sl@0
   431
      mr_const_reference mrcr = m_cresults[ival];
sl@0
   432
      ignore_unused_variable_warning(mrcr);
sl@0
   433
      mr_const_reference mrcr2 = m_cresults.prefix();
sl@0
   434
      ignore_unused_variable_warning(mrcr2);
sl@0
   435
      mr_const_reference mrcr3 = m_cresults.suffix();
sl@0
   436
      ignore_unused_variable_warning(mrcr3);
sl@0
   437
      mr_const_iterator mrci = m_cresults.begin();
sl@0
   438
      ignore_unused_variable_warning(mrci);
sl@0
   439
      mrci = m_cresults.end();
sl@0
   440
      ignore_unused_variable_warning(mrci);
sl@0
   441
sl@0
   442
      mr_allocator_type at2 = m_cresults.get_allocator();
sl@0
   443
      m_results.swap(m_results);
sl@0
   444
      global_regex_namespace::swap(m_results, m_results);
sl@0
   445
sl@0
   446
      // regex_match:
sl@0
   447
      b = global_regex_namespace::regex_match(m_in, m_in, m_results, e);
sl@0
   448
      ignore_unused_variable_warning(b);
sl@0
   449
      b = global_regex_namespace::regex_match(m_in, m_in, m_results, e, m_mft);
sl@0
   450
      ignore_unused_variable_warning(b);
sl@0
   451
      b = global_regex_namespace::regex_match(m_in, m_in, e);
sl@0
   452
      ignore_unused_variable_warning(b);
sl@0
   453
      b = global_regex_namespace::regex_match(m_in, m_in, e, m_mft);
sl@0
   454
      ignore_unused_variable_warning(b);
sl@0
   455
      b = global_regex_namespace::regex_match(m_pointer, m_pmatch, e);
sl@0
   456
      ignore_unused_variable_warning(b);
sl@0
   457
      b = global_regex_namespace::regex_match(m_pointer, m_pmatch, e, m_mft);
sl@0
   458
      ignore_unused_variable_warning(b);
sl@0
   459
      b = global_regex_namespace::regex_match(m_pointer, e);
sl@0
   460
      ignore_unused_variable_warning(b);
sl@0
   461
      b = global_regex_namespace::regex_match(m_pointer, e, m_mft);
sl@0
   462
      ignore_unused_variable_warning(b);
sl@0
   463
      // regex_search:
sl@0
   464
      b = global_regex_namespace::regex_search(m_in, m_in, m_results, e);
sl@0
   465
      ignore_unused_variable_warning(b);
sl@0
   466
      b = global_regex_namespace::regex_search(m_in, m_in, m_results, e, m_mft);
sl@0
   467
      ignore_unused_variable_warning(b);
sl@0
   468
      b = global_regex_namespace::regex_search(m_in, m_in, e);
sl@0
   469
      ignore_unused_variable_warning(b);
sl@0
   470
      b = global_regex_namespace::regex_search(m_in, m_in, e, m_mft);
sl@0
   471
      ignore_unused_variable_warning(b);
sl@0
   472
      b = global_regex_namespace::regex_search(m_pointer, m_pmatch, e);
sl@0
   473
      ignore_unused_variable_warning(b);
sl@0
   474
      b = global_regex_namespace::regex_search(m_pointer, m_pmatch, e, m_mft);
sl@0
   475
      ignore_unused_variable_warning(b);
sl@0
   476
      b = global_regex_namespace::regex_search(m_pointer, e);
sl@0
   477
      ignore_unused_variable_warning(b);
sl@0
   478
      b = global_regex_namespace::regex_search(m_pointer, e, m_mft);
sl@0
   479
      ignore_unused_variable_warning(b);
sl@0
   480
sl@0
   481
      // regex_iterator:
sl@0
   482
      typedef typename regex_iterator_type::regex_type rit_regex_type;
sl@0
   483
      typedef typename regex_iterator_type::value_type rit_value_type;
sl@0
   484
      typedef typename regex_iterator_type::difference_type rit_difference_type;
sl@0
   485
      typedef typename regex_iterator_type::pointer rit_pointer;
sl@0
   486
      typedef typename regex_iterator_type::reference rit_reference;
sl@0
   487
      typedef typename regex_iterator_type::iterator_category rit_iterator_category;
sl@0
   488
      BOOST_STATIC_ASSERT((::boost::is_same<rit_regex_type, Regex>::value));
sl@0
   489
      BOOST_STATIC_ASSERT((::boost::is_same<rit_value_type, match_results_type>::value));
sl@0
   490
      BOOST_STATIC_ASSERT((::boost::is_same<rit_difference_type, std::ptrdiff_t>::value));
sl@0
   491
      BOOST_STATIC_ASSERT((::boost::is_same<rit_pointer, const match_results_type*>::value));
sl@0
   492
      BOOST_STATIC_ASSERT((::boost::is_same<rit_reference, const match_results_type&>::value));
sl@0
   493
      BOOST_STATIC_ASSERT((::boost::is_convertible<rit_iterator_category*, std::forward_iterator_tag*>::value));
sl@0
   494
      // this takes care of most of the checks needed:
sl@0
   495
      function_requires<ForwardIteratorConcept<regex_iterator_type> >();
sl@0
   496
      regex_iterator_type iter1(m_in, m_in, e);
sl@0
   497
      ignore_unused_variable_warning(iter1);
sl@0
   498
      regex_iterator_type iter2(m_in, m_in, e, m_mft);
sl@0
   499
      ignore_unused_variable_warning(iter2);
sl@0
   500
sl@0
   501
      // regex_token_iterator:
sl@0
   502
      typedef typename regex_token_iterator_type::regex_type rtit_regex_type;
sl@0
   503
      typedef typename regex_token_iterator_type::value_type rtit_value_type;
sl@0
   504
      typedef typename regex_token_iterator_type::difference_type rtit_difference_type;
sl@0
   505
      typedef typename regex_token_iterator_type::pointer rtit_pointer;
sl@0
   506
      typedef typename regex_token_iterator_type::reference rtit_reference;
sl@0
   507
      typedef typename regex_token_iterator_type::iterator_category rtit_iterator_category;
sl@0
   508
      BOOST_STATIC_ASSERT((::boost::is_same<rtit_regex_type, Regex>::value));
sl@0
   509
      BOOST_STATIC_ASSERT((::boost::is_same<rtit_value_type, sub_match_type>::value));
sl@0
   510
      BOOST_STATIC_ASSERT((::boost::is_same<rtit_difference_type, std::ptrdiff_t>::value));
sl@0
   511
      BOOST_STATIC_ASSERT((::boost::is_same<rtit_pointer, const sub_match_type*>::value));
sl@0
   512
      BOOST_STATIC_ASSERT((::boost::is_same<rtit_reference, const sub_match_type&>::value));
sl@0
   513
      BOOST_STATIC_ASSERT((::boost::is_convertible<rtit_iterator_category*, std::forward_iterator_tag*>::value));
sl@0
   514
      // this takes care of most of the checks needed:
sl@0
   515
      function_requires<ForwardIteratorConcept<regex_token_iterator_type> >();
sl@0
   516
      regex_token_iterator_type ti1(m_in, m_in, e);
sl@0
   517
      ignore_unused_variable_warning(ti1);
sl@0
   518
      regex_token_iterator_type ti2(m_in, m_in, e, 0);
sl@0
   519
      ignore_unused_variable_warning(ti2);
sl@0
   520
      regex_token_iterator_type ti3(m_in, m_in, e, 0, m_mft);
sl@0
   521
      ignore_unused_variable_warning(ti3);
sl@0
   522
      std::vector<int> subs;
sl@0
   523
      regex_token_iterator_type ti4(m_in, m_in, e, subs);
sl@0
   524
      ignore_unused_variable_warning(ti4);
sl@0
   525
      regex_token_iterator_type ti5(m_in, m_in, e, subs, m_mft);
sl@0
   526
      ignore_unused_variable_warning(ti5);
sl@0
   527
      static const int i_array[3] = { 1, 2, 3, };
sl@0
   528
      regex_token_iterator_type ti6(m_in, m_in, e, i_array);
sl@0
   529
      ignore_unused_variable_warning(ti6);
sl@0
   530
      regex_token_iterator_type ti7(m_in, m_in, e, i_array, m_mft);
sl@0
   531
      ignore_unused_variable_warning(ti7);
sl@0
   532
   }
sl@0
   533
sl@0
   534
   pointer_type m_pointer;
sl@0
   535
   flag_type m_flags;
sl@0
   536
   size_type m_size;
sl@0
   537
   input_iterator_type in1, in2;
sl@0
   538
   const sub_match_type m_sub;
sl@0
   539
   const value_type m_char;
sl@0
   540
   match_results_type m_results;
sl@0
   541
   const match_results_type m_cresults;
sl@0
   542
   OutIterator m_out;
sl@0
   543
   BidiIterator m_in;
sl@0
   544
   global_regex_namespace::regex_constants::match_flag_type m_mft;
sl@0
   545
   global_regex_namespace::match_results<pointer_type> m_pmatch;
sl@0
   546
sl@0
   547
   BaseRegexConcept();
sl@0
   548
   BaseRegexConcept(const BaseRegexConcept&);
sl@0
   549
   BaseRegexConcept& operator=(const BaseRegexConcept&);
sl@0
   550
};
sl@0
   551
sl@0
   552
//
sl@0
   553
// RegexConcept:
sl@0
   554
// Test every interface in the std:
sl@0
   555
//
sl@0
   556
template <class Regex>
sl@0
   557
struct RegexConcept
sl@0
   558
{
sl@0
   559
   typedef typename Regex::value_type value_type;
sl@0
   560
   typedef typename Regex::size_type size_type;
sl@0
   561
   typedef typename Regex::flag_type flag_type;
sl@0
   562
   typedef typename Regex::locale_type locale_type;
sl@0
   563
sl@0
   564
   // derived test types:
sl@0
   565
   typedef const value_type* pointer_type;
sl@0
   566
   typedef std::basic_string<value_type> string_type;
sl@0
   567
   typedef boost::bidirectional_iterator_archetype<value_type> BidiIterator;
sl@0
   568
   typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type;
sl@0
   569
   typedef global_regex_namespace::match_results<BidiIterator> match_results_type;
sl@0
   570
   typedef output_iterator_archetype<value_type> OutIterator;
sl@0
   571
sl@0
   572
sl@0
   573
   void constraints() 
sl@0
   574
   {
sl@0
   575
      function_requires<BaseRegexConcept<Regex> >();
sl@0
   576
      // string based construct:
sl@0
   577
      Regex e1(m_string);
sl@0
   578
      ignore_unused_variable_warning(e1);
sl@0
   579
      Regex e2(m_string, m_flags);
sl@0
   580
      ignore_unused_variable_warning(e2);
sl@0
   581
sl@0
   582
      // assign etc:
sl@0
   583
      Regex e;
sl@0
   584
      e = m_string;
sl@0
   585
      e.assign(m_string);
sl@0
   586
      e.assign(m_string, m_flags);
sl@0
   587
sl@0
   588
      // sub_match:
sl@0
   589
      string_type s(m_sub);
sl@0
   590
      ignore_unused_variable_warning(s);
sl@0
   591
      s = m_sub.str();
sl@0
   592
      ignore_unused_variable_warning(s);
sl@0
   593
      int i = m_sub.compare(m_string);
sl@0
   594
      ignore_unused_variable_warning(i);
sl@0
   595
sl@0
   596
      int i2 = m_sub.compare(m_sub);
sl@0
   597
      ignore_unused_variable_warning(i2);
sl@0
   598
      i2 = m_sub.compare(m_pointer);
sl@0
   599
      ignore_unused_variable_warning(i2);
sl@0
   600
sl@0
   601
      bool b = m_sub == m_sub;
sl@0
   602
      ignore_unused_variable_warning(b);
sl@0
   603
      b = m_sub != m_sub;
sl@0
   604
      ignore_unused_variable_warning(b);
sl@0
   605
      b = m_sub <= m_sub;
sl@0
   606
      ignore_unused_variable_warning(b);
sl@0
   607
      b = m_sub <= m_sub;
sl@0
   608
      ignore_unused_variable_warning(b);
sl@0
   609
      b = m_sub > m_sub;
sl@0
   610
      ignore_unused_variable_warning(b);
sl@0
   611
      b = m_sub >= m_sub;
sl@0
   612
      ignore_unused_variable_warning(b);
sl@0
   613
sl@0
   614
      b = m_sub == m_pointer;
sl@0
   615
      ignore_unused_variable_warning(b);
sl@0
   616
      b = m_sub != m_pointer;
sl@0
   617
      ignore_unused_variable_warning(b);
sl@0
   618
      b = m_sub <= m_pointer;
sl@0
   619
      ignore_unused_variable_warning(b);
sl@0
   620
      b = m_sub <= m_pointer;
sl@0
   621
      ignore_unused_variable_warning(b);
sl@0
   622
      b = m_sub > m_pointer;
sl@0
   623
      ignore_unused_variable_warning(b);
sl@0
   624
      b = m_sub >= m_pointer;
sl@0
   625
      ignore_unused_variable_warning(b);
sl@0
   626
sl@0
   627
      b = m_pointer == m_sub;
sl@0
   628
      ignore_unused_variable_warning(b);
sl@0
   629
      b = m_pointer != m_sub;
sl@0
   630
      ignore_unused_variable_warning(b);
sl@0
   631
      b = m_pointer <= m_sub;
sl@0
   632
      ignore_unused_variable_warning(b);
sl@0
   633
      b = m_pointer <= m_sub;
sl@0
   634
      ignore_unused_variable_warning(b);
sl@0
   635
      b = m_pointer > m_sub;
sl@0
   636
      ignore_unused_variable_warning(b);
sl@0
   637
      b = m_pointer >= m_sub;
sl@0
   638
      ignore_unused_variable_warning(b);
sl@0
   639
sl@0
   640
      b = m_sub == m_char;
sl@0
   641
      ignore_unused_variable_warning(b);
sl@0
   642
      b = m_sub != m_char;
sl@0
   643
      ignore_unused_variable_warning(b);
sl@0
   644
      b = m_sub <= m_char;
sl@0
   645
      ignore_unused_variable_warning(b);
sl@0
   646
      b = m_sub <= m_char;
sl@0
   647
      ignore_unused_variable_warning(b);
sl@0
   648
      b = m_sub > m_char;
sl@0
   649
      ignore_unused_variable_warning(b);
sl@0
   650
      b = m_sub >= m_char;
sl@0
   651
      ignore_unused_variable_warning(b);
sl@0
   652
sl@0
   653
      b = m_char == m_sub;
sl@0
   654
      ignore_unused_variable_warning(b);
sl@0
   655
      b = m_char != m_sub;
sl@0
   656
      ignore_unused_variable_warning(b);
sl@0
   657
      b = m_char <= m_sub;
sl@0
   658
      ignore_unused_variable_warning(b);
sl@0
   659
      b = m_char <= m_sub;
sl@0
   660
      ignore_unused_variable_warning(b);
sl@0
   661
      b = m_char > m_sub;
sl@0
   662
      ignore_unused_variable_warning(b);
sl@0
   663
      b = m_char >= m_sub;
sl@0
   664
      ignore_unused_variable_warning(b);
sl@0
   665
sl@0
   666
      b = m_sub == m_string;
sl@0
   667
      ignore_unused_variable_warning(b);
sl@0
   668
      b = m_sub != m_string;
sl@0
   669
      ignore_unused_variable_warning(b);
sl@0
   670
      b = m_sub <= m_string;
sl@0
   671
      ignore_unused_variable_warning(b);
sl@0
   672
      b = m_sub <= m_string;
sl@0
   673
      ignore_unused_variable_warning(b);
sl@0
   674
      b = m_sub > m_string;
sl@0
   675
      ignore_unused_variable_warning(b);
sl@0
   676
      b = m_sub >= m_string;
sl@0
   677
      ignore_unused_variable_warning(b);
sl@0
   678
sl@0
   679
      b = m_string == m_sub;
sl@0
   680
      ignore_unused_variable_warning(b);
sl@0
   681
      b = m_string != m_sub;
sl@0
   682
      ignore_unused_variable_warning(b);
sl@0
   683
      b = m_string <= m_sub;
sl@0
   684
      ignore_unused_variable_warning(b);
sl@0
   685
      b = m_string <= m_sub;
sl@0
   686
      ignore_unused_variable_warning(b);
sl@0
   687
      b = m_string > m_sub;
sl@0
   688
      ignore_unused_variable_warning(b);
sl@0
   689
      b = m_string >= m_sub;
sl@0
   690
      ignore_unused_variable_warning(b);
sl@0
   691
sl@0
   692
      // match results:
sl@0
   693
      m_string = m_results.str();
sl@0
   694
      ignore_unused_variable_warning(m_string);
sl@0
   695
      m_string = m_results.str(0);
sl@0
   696
      ignore_unused_variable_warning(m_string);
sl@0
   697
      m_out = m_cresults.format(m_out, m_string);
sl@0
   698
      m_out = m_cresults.format(m_out, m_string, m_mft);
sl@0
   699
      m_string = m_cresults.format(m_string);
sl@0
   700
      ignore_unused_variable_warning(m_string);
sl@0
   701
      m_string = m_cresults.format(m_string, m_mft);
sl@0
   702
      ignore_unused_variable_warning(m_string);
sl@0
   703
sl@0
   704
      // regex_match:
sl@0
   705
      b = global_regex_namespace::regex_match(m_string, m_smatch, e);
sl@0
   706
      ignore_unused_variable_warning(b);
sl@0
   707
      b = global_regex_namespace::regex_match(m_string, m_smatch, e, m_mft);
sl@0
   708
      ignore_unused_variable_warning(b);
sl@0
   709
      b = global_regex_namespace::regex_match(m_string, e);
sl@0
   710
      ignore_unused_variable_warning(b);
sl@0
   711
      b = global_regex_namespace::regex_match(m_string, e, m_mft);
sl@0
   712
      ignore_unused_variable_warning(b);
sl@0
   713
sl@0
   714
      // regex_search:
sl@0
   715
      b = global_regex_namespace::regex_search(m_string, m_smatch, e);
sl@0
   716
      ignore_unused_variable_warning(b);
sl@0
   717
      b = global_regex_namespace::regex_search(m_string, m_smatch, e, m_mft);
sl@0
   718
      ignore_unused_variable_warning(b);
sl@0
   719
      b = global_regex_namespace::regex_search(m_string, e);
sl@0
   720
      ignore_unused_variable_warning(b);
sl@0
   721
      b = global_regex_namespace::regex_search(m_string, e, m_mft);
sl@0
   722
      ignore_unused_variable_warning(b);
sl@0
   723
sl@0
   724
      // regex_replace:
sl@0
   725
      m_out = global_regex_namespace::regex_replace(m_out, m_in, m_in, e, m_string, m_mft);
sl@0
   726
      m_out = global_regex_namespace::regex_replace(m_out, m_in, m_in, e, m_string);
sl@0
   727
      m_string = global_regex_namespace::regex_replace(m_string, e, m_string, m_mft);
sl@0
   728
      ignore_unused_variable_warning(m_string);
sl@0
   729
      m_string = global_regex_namespace::regex_replace(m_string, e, m_string);
sl@0
   730
      ignore_unused_variable_warning(m_string);
sl@0
   731
sl@0
   732
   }
sl@0
   733
sl@0
   734
   flag_type m_flags;
sl@0
   735
   string_type m_string;
sl@0
   736
   const sub_match_type m_sub;
sl@0
   737
   match_results_type m_results;
sl@0
   738
   pointer_type m_pointer;
sl@0
   739
   value_type m_char;
sl@0
   740
   const match_results_type m_cresults;
sl@0
   741
   OutIterator m_out;
sl@0
   742
   BidiIterator m_in;
sl@0
   743
   global_regex_namespace::regex_constants::match_flag_type m_mft;
sl@0
   744
   global_regex_namespace::match_results<typename string_type::const_iterator> m_smatch;
sl@0
   745
sl@0
   746
   RegexConcept();
sl@0
   747
   RegexConcept(const RegexConcept&);
sl@0
   748
   RegexConcept& operator=(const RegexConcept&);
sl@0
   749
};
sl@0
   750
sl@0
   751
#ifndef BOOST_REGEX_TEST_STD
sl@0
   752
//
sl@0
   753
// BoostRegexConcept:
sl@0
   754
// Test every interface in the Boost implementation:
sl@0
   755
//
sl@0
   756
template <class Regex>
sl@0
   757
struct BoostRegexConcept
sl@0
   758
{
sl@0
   759
   typedef typename Regex::value_type value_type;
sl@0
   760
   typedef typename Regex::size_type size_type;
sl@0
   761
   typedef typename Regex::flag_type flag_type;
sl@0
   762
   typedef typename Regex::locale_type locale_type;
sl@0
   763
sl@0
   764
   // derived test types:
sl@0
   765
   typedef const value_type* pointer_type;
sl@0
   766
   typedef std::basic_string<value_type> string_type;
sl@0
   767
   typedef typename Regex::const_iterator const_iterator;
sl@0
   768
   typedef bidirectional_iterator_archetype<value_type> BidiIterator;
sl@0
   769
   typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type;
sl@0
   770
   typedef global_regex_namespace::match_results<BidiIterator> match_results_type;
sl@0
   771
sl@0
   772
   void constraints() 
sl@0
   773
   {
sl@0
   774
      global_regex_namespace::regex_constants::match_flag_type mopts
sl@0
   775
         = global_regex_namespace::regex_constants::match_default
sl@0
   776
         | global_regex_namespace::regex_constants::match_not_bol
sl@0
   777
         | global_regex_namespace::regex_constants::match_not_eol
sl@0
   778
         | global_regex_namespace::regex_constants::match_not_bow
sl@0
   779
         | global_regex_namespace::regex_constants::match_not_eow
sl@0
   780
         | global_regex_namespace::regex_constants::match_any
sl@0
   781
         | global_regex_namespace::regex_constants::match_not_null
sl@0
   782
         | global_regex_namespace::regex_constants::match_continuous
sl@0
   783
         | global_regex_namespace::regex_constants::match_partial
sl@0
   784
         | global_regex_namespace::regex_constants::match_prev_avail
sl@0
   785
         | global_regex_namespace::regex_constants::format_default
sl@0
   786
         | global_regex_namespace::regex_constants::format_sed
sl@0
   787
         | global_regex_namespace::regex_constants::format_perl
sl@0
   788
         | global_regex_namespace::regex_constants::format_no_copy
sl@0
   789
         | global_regex_namespace::regex_constants::format_first_only;
sl@0
   790
sl@0
   791
      (void)mopts;
sl@0
   792
sl@0
   793
      function_requires<RegexConcept<Regex> >();
sl@0
   794
      const global_regex_namespace::regex_error except(global_regex_namespace::regex_constants::error_collate);
sl@0
   795
      std::ptrdiff_t pt = except.position();
sl@0
   796
      ignore_unused_variable_warning(pt);
sl@0
   797
      const Regex ce, ce2;
sl@0
   798
#ifndef BOOST_NO_STD_LOCALE
sl@0
   799
      m_stream << ce;
sl@0
   800
#endif
sl@0
   801
      unsigned i = ce.error_code();
sl@0
   802
      ignore_unused_variable_warning(i);
sl@0
   803
      pointer_type p = ce.expression();
sl@0
   804
      ignore_unused_variable_warning(p);
sl@0
   805
      int i2 = ce.compare(ce2);
sl@0
   806
      ignore_unused_variable_warning(i2);
sl@0
   807
      bool b = ce == ce2;
sl@0
   808
      ignore_unused_variable_warning(b);
sl@0
   809
      b = ce != ce2;
sl@0
   810
      ignore_unused_variable_warning(b);
sl@0
   811
      b = ce < ce2;
sl@0
   812
      ignore_unused_variable_warning(b);
sl@0
   813
      b = ce > ce2;
sl@0
   814
      ignore_unused_variable_warning(b);
sl@0
   815
      b = ce <= ce2;
sl@0
   816
      ignore_unused_variable_warning(b);
sl@0
   817
      b = ce >= ce2;
sl@0
   818
      ignore_unused_variable_warning(b);
sl@0
   819
      i = ce.status();
sl@0
   820
      ignore_unused_variable_warning(i);
sl@0
   821
      size_type s = ce.max_size();
sl@0
   822
      ignore_unused_variable_warning(s);
sl@0
   823
      s = ce.size();
sl@0
   824
      ignore_unused_variable_warning(s);
sl@0
   825
      const_iterator pi = ce.begin();
sl@0
   826
      ignore_unused_variable_warning(pi);
sl@0
   827
      pi = ce.end();
sl@0
   828
      ignore_unused_variable_warning(pi);
sl@0
   829
      string_type s2 = ce.str();
sl@0
   830
      ignore_unused_variable_warning(s2);
sl@0
   831
sl@0
   832
      m_string = m_sub + m_sub;
sl@0
   833
      ignore_unused_variable_warning(m_string);
sl@0
   834
      m_string = m_sub + m_pointer;
sl@0
   835
      ignore_unused_variable_warning(m_string);
sl@0
   836
      m_string = m_pointer + m_sub;
sl@0
   837
      ignore_unused_variable_warning(m_string);
sl@0
   838
      m_string = m_sub + m_string;
sl@0
   839
      ignore_unused_variable_warning(m_string);
sl@0
   840
      m_string = m_string + m_sub;
sl@0
   841
      ignore_unused_variable_warning(m_string);
sl@0
   842
      m_string = m_sub + m_char;
sl@0
   843
      ignore_unused_variable_warning(m_string);
sl@0
   844
      m_string = m_char + m_sub;
sl@0
   845
      ignore_unused_variable_warning(m_string);
sl@0
   846
sl@0
   847
#ifndef BOOST_NO_STD_LOCALE
sl@0
   848
      m_stream << m_sub;
sl@0
   849
      m_stream << m_cresults;
sl@0
   850
#endif
sl@0
   851
   }
sl@0
   852
sl@0
   853
   std::basic_ostream<value_type> m_stream;
sl@0
   854
   sub_match_type m_sub;
sl@0
   855
   pointer_type m_pointer;
sl@0
   856
   string_type m_string;
sl@0
   857
   const value_type m_char;
sl@0
   858
   match_results_type m_results;
sl@0
   859
   const match_results_type m_cresults;
sl@0
   860
sl@0
   861
   BoostRegexConcept();
sl@0
   862
   BoostRegexConcept(const BoostRegexConcept&);
sl@0
   863
   BoostRegexConcept& operator=(const BoostRegexConcept&);
sl@0
   864
};
sl@0
   865
sl@0
   866
#endif // BOOST_REGEX_TEST_STD
sl@0
   867
sl@0
   868
}
sl@0
   869
sl@0
   870
#endif