[/ 
  Copyright 2006-2007 John Maddock.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  http://www.boost.org/LICENSE_1_0.txt).
]

[section:basic_regex basic_regex]

[h4 Synopsis]

   #include <boost/regex.hpp>

The template class `basic_regex` encapsulates regular expression 
parsing and compilation. The class takes two template parameters:

* `charT`: determines the character type, i.e. either `char` or `wchar_t`; 
see [link boost_regex.ref.concepts.charT_concept charT concept].
* `traits`: determines the behavior of the character type, for example which 
character class names are recognized. A default traits class is provided: 
`regex_traits<charT>`.  See also 
[link boost_regex.ref.concepts.traits_concept traits concept].

For ease of use there are two typedefs that define the two standard 
`basic_regex` instances, unless you want to use custom traits classes or 
non-standard character types (for example see 
[link boost_regex.ref.non_std_strings.icu unicode support]), 
you won't need to use anything other than these:

   namespace boost{

   template <class charT, class traits = regex_traits<charT>  >
   class basic_regex;
   
   typedef basic_regex<char>      regex;
   typedef basic_regex<wchar_t>   wregex;

   }

The definition of `basic_regex` follows: it is based very closely on class 
`basic_string`, and fulfils the requirements for a constant-container of `charT`.

   namespace boost{

   template <class  charT, class traits = regex_traits<charT> >
   class basic_regex {
      public:          
      // types:
      typedef          charT                                value_type;
      typedef          implementation-specific              const_iterator;
      typedef          const_iterator                       iterator;                 
      typedef          charT&                               reference;           
      typedef          const charT&                         const_reference;           
      typedef          std::ptrdiff_t                       difference_type;                 
      typedef          std::size_t                          size_type;
      typedef          regex_constants::``[syntax_option_type]``  flag_type;
      typedef typename traits::locale_type                  locale_type;

      // constants:
      // main option selection:
      static const regex_constants::``[syntax_option_type]`` normal          
                                                   = regex_constants::normal;
      static const regex_constants::``[syntax_option_type]`` ECMAScript      
                                                   = normal;
      static const regex_constants::``[syntax_option_type]`` JavaScript      
                                                   = normal;
      static const regex_constants::``[syntax_option_type]`` JScript         
                                                   = normal;
      static const regex_constants::``[syntax_option_type]`` basic           
                                                   = regex_constants::basic;
      static const regex_constants::``[syntax_option_type]`` extended        
                                                   = regex_constants::extended;
      static const regex_constants::``[syntax_option_type]`` awk             
                                                   = regex_constants::awk;
      static const regex_constants::``[syntax_option_type]`` grep            
                                                   = regex_constants::grep;
      static const regex_constants::``[syntax_option_type]`` egrep           
                                                   = regex_constants::egrep;
      static const regex_constants::``[syntax_option_type]`` sed             
                                                   = basic = regex_constants::sed;
      static const regex_constants::``[syntax_option_type]`` perl            
                                                   = regex_constants::perl;
      static const regex_constants::``[syntax_option_type]`` literal         
                                                   = regex_constants::literal;

      // modifiers specific to perl expressions:
      static const regex_constants::``[syntax_option_type]`` no_mod_m        
                                                   = regex_constants::no_mod_m;
      static const regex_constants::``[syntax_option_type]`` no_mod_s        
                                                   = regex_constants::no_mod_s;
      static const regex_constants::``[syntax_option_type]`` mod_s           
                                                   = regex_constants::mod_s;
      static const regex_constants::``[syntax_option_type]`` mod_x           
                                                   = regex_constants::mod_x;

      // modifiers specific to POSIX basic expressions:
      static const regex_constants::``[syntax_option_type]`` bk_plus_qm      
                                                   = regex_constants::bk_plus_qm;
      static const regex_constants::``[syntax_option_type]`` bk_vbar         
                                                   = regex_constants::bk_vbar
      static const regex_constants::``[syntax_option_type]`` no_char_classes 
                                                   = regex_constants::no_char_classes
      static const regex_constants::``[syntax_option_type]`` no_intervals    
                                                   = regex_constants::no_intervals

      // common modifiers:
      static const regex_constants::``[syntax_option_type]`` nosubs          
                                                   = regex_constants::nosubs;
      static const regex_constants::``[syntax_option_type]`` optimize        
                                                   = regex_constants::optimize;
      static const regex_constants::``[syntax_option_type]`` collate         
                                                   = regex_constants::collate;
      static const regex_constants::``[syntax_option_type]`` newline_alt     
                                                   = regex_constants::newline_alt;
      static const regex_constants::``[syntax_option_type]`` no_except       
                                                   = regex_constants::newline_alt;

      // construct/copy/destroy:
      explicit ``[link boost_regex.basic_regex.construct1 basic_regex]`` ();
      explicit ``[link boost_regex.basic_regex.construct2 basic_regex]``(const  charT* p, flag_type f = regex_constants::normal);
      ``[link boost_regex.basic_regex.construct3 basic_regex]``(const charT* p1, const  charT* p2, 
                  flag_type f = regex_constants::normal);
      ``[link boost_regex.basic_regex.construct4 basic_regex]``(const charT* p, size_type len, flag_type  f);
      ``[link boost_regex.basic_regex.construct5 basic_regex]``(const basic_regex&);

      template <class ST, class SA>
      explicit ``[link boost_regex.basic_regex.construct6 basic_regex]``(const basic_string<charT, ST,  SA>& p, 
                           flag_type f = regex_constants::normal);

      template <class InputIterator>
      ``[link boost_regex.basic_regex.construct7 basic_regex]``(InputIterator first,  InputIterator last, 
                  flag_type f = regex_constants::normal);

      ~basic_regex();
      ``[link boost_regex.basic_regex.opeq1 basic_regex& operator=]``(const basic_regex&);
      ``[link boost_regex.basic_regex.opeq2 basic_regex& operator=]`` (const charT* ptr); 

      template <class ST, class SA> 
      ``[link boost_regex.basic_regex.opeq3 basic_regex& operator=]`` (const basic_string<charT, ST, SA>& p);
      // iterators: 
      ``[link boost_regex.basic_regex.begin const_iterator begin]``() const; 
      ``[link boost_regex.basic_regex.end const_iterator end]``() const;
      // capacity: 
      ``[link boost_regex.basic_regex.size size_type size]``() const; 
      ``[link boost_regex.basic_regex.max_size size_type max_size]``() const; 
      ``[link boost_regex.basic_regex.empty bool empty]``() const; 
      ``[link boost_regex.basic_regex.mark_count unsigned mark_count]``()const; 
      //
      // modifiers: 
      ``[link boost_regex.basic_regex.assign1 basic_regex& assign]``(const basic_regex& that); 
      ``[link boost_regex.basic_regex.assign2 basic_regex& assign]``(const charT* ptr, 
                          flag_type f = regex_constants::normal);
      ``[link boost_regex.basic_regex.assign3 basic_regex& assign]``(const charT* ptr, unsigned int len, flag_type f);

      template <class string_traits, class A>
      ``[link boost_regex.basic_regex.assign4 basic_regex& assign]``(const basic_string<charT, string_traits, A>& s,
                          flag_type f = regex_constants::normal);

      template <class InputIterator>
      ``[link boost_regex.basic_regex.assign5 basic_regex& assign]``(InputIterator first, InputIterator last,
                          flag_type f = regex_constants::normal);

      // const operations:
      ``[link boost_regex.basic_regex.flags flag_type flags]``() const;
      ``[link boost_regex.basic_regex.status int status]``()const;
      ``[link boost_regex.basic_regex.str basic_string<charT> str]``() const;
      ``[link boost_regex.basic_regex.compare int compare]``(basic_regex&) const;
      // locale:
      ``[link boost_regex.basic_regex.imbue locale_type imbue]``(locale_type loc);
      ``[link boost_regex.basic_regex.getloc locale_type getloc]``() const;
      // swap
      ``[link boost_regex.basic_regex.swap void swap]``(basic_regex&) throw();
   };

   template <class charT, class traits>
   ``[link boost_regex.basic_regex.op_eq bool operator ==]`` (const basic_regex<charT, traits>& lhs,
                     const basic_regex<charT, traits>& rhs);

   template <class charT, class traits>
   ``[link boost_regex.basic_regex.op_ne bool operator !=]`` (const basic_regex<charT, traits>& lhs,
                     const basic_regex<charT, traits>& rhs);

   template <class charT, class traits>
   ``[link boost_regex.basic_regex.op_lt bool operator <]`` (const basic_regex<charT, traits>& lhs,
                  const basic_regex<charT, traits>& rhs);

   template <class charT, class traits>
   ``[link boost_regex.basic_regex.op_le bool operator <=]`` (const basic_regex<charT, traits>& lhs,
                     const basic_regex<charT, traits>& rhs);

   template <class charT, class traits>
   ``[link boost_regex.basic_regex.op_ge bool operator >=]`` (const basic_regex<charT, traits>& lhs,
                     const basic_regex<charT, traits>& rhs);

   template <class charT, class traits>
   ``[link boost_regex.basic_regex.op_gt bool operator >]`` (const basic_regex<charT, traits>& lhs,
                  const basic_regex<charT, traits>& rhs);

   template <class charT, class io_traits, class re_traits>
   basic_ostream<charT, io_traits>&
      ``[link boost_regex.basic_regex.op_stream operator <<]`` (basic_ostream<charT, io_traits>& os,
                  const basic_regex<charT, re_traits>& e);

   template <class charT, class traits>
   ``[link boost_regex.basic_regex.op_swap void swap]``(basic_regex<charT, traits>& e1,
            basic_regex<charT, traits>& e2);

   typedef basic_regex<char> regex;
   typedef basic_regex<wchar_t> wregex;

   } // namespace boost

[h4 Description]

Class `basic_regex` has the following public members:

   // main option selection:
   static const regex_constants::``[syntax_option_type]`` normal           
                                             = regex_constants::normal;
   static const regex_constants::``[syntax_option_type]`` ECMAScript       
                                             = normal;
   static const regex_constants::``[syntax_option_type]`` JavaScript       
                                             = normal;
   static const regex_constants::``[syntax_option_type]`` JScript          
                                             = normal;
   static const regex_constants::``[syntax_option_type]`` basic            
                                             = regex_constants::basic;
   static const regex_constants::``[syntax_option_type]`` extended         
                                             = regex_constants::extended;
   static const regex_constants::``[syntax_option_type]`` awk              
                                             = regex_constants::awk;
   static const regex_constants::``[syntax_option_type]`` grep             
                                             = regex_constants::grep;
   static const regex_constants::``[syntax_option_type]`` egrep            
                                             = regex_constants::egrep;
   static const regex_constants::``[syntax_option_type]`` sed              
                                             = regex_constants::sed;
   static const regex_constants::``[syntax_option_type]`` perl             
                                             = regex_constants::perl;
   static const regex_constants::``[syntax_option_type]`` literal          
                                             = regex_constants::literal;

   // modifiers specific to perl expressions:
   static const regex_constants::``[syntax_option_type]`` no_mod_m         
                                             = regex_constants::no_mod_m;
   static const regex_constants::``[syntax_option_type]`` no_mod_s         
                                             = regex_constants::no_mod_s;
   static const regex_constants::``[syntax_option_type]`` mod_s            
                                             = regex_constants::mod_s;
   static const regex_constants::``[syntax_option_type]`` mod_x            
                                             = regex_constants::mod_x;

   // modifiers specific to POSIX basic expressions:
   static const regex_constants::``[syntax_option_type]`` bk_plus_qm       
                                             = regex_constants::bk_plus_qm;
   static const regex_constants::``[syntax_option_type]`` bk_vbar          
                                             = regex_constants::bk_vbar
   static const regex_constants::``[syntax_option_type]`` no_char_classes  
                                             = regex_constants::no_char_classes
   static const regex_constants::``[syntax_option_type]`` no_intervals     
                                             = regex_constants::no_intervals

   // common modifiers:
   static const regex_constants::``[syntax_option_type]`` nosubs           
                                             = regex_constants::nosubs;
   static const regex_constants::``[syntax_option_type]`` optimize         
                                             = regex_constants::optimize;
   static const regex_constants::``[syntax_option_type]`` collate          
                                             = regex_constants::collate;
   static const regex_constants::``[syntax_option_type]`` newline_alt      
                                             = regex_constants::newline_alt;

The meaning of these options is documented in the [syntax_option_type]
section.

The static constant members are provided as synonyms for the constants declared 
in namespace `boost::regex_constants`; for each constant of type [syntax_option_type] 
declared in namespace `boost::regex_constants` then a constant with the same name, 
type and value is declared within the scope of basic_regex.

[#boost_regex.basic_regex.construct1]

   basic_regex();

[*Effects]: Constructs an object of class `basic_regex`. 

[table basic_regex default construction postconditions
[[Element][Value]]
[[`empty()`][`true`]]
[[`size()`][`0`]]
[[`str()`][`basic_string<charT>()`]]
]

[#boost_regex.basic_regex.construct2]

   basic_regex(const charT* p, flag_type f = regex_constants::normal);

[*Requires]: /p/ shall not be a null pointer.

[*Throws]: [bad_expression] if /p/ is not a valid regular expression, 
unless the flag `no_except` is set in /f/.

[*Effects]: Constructs an object of class [basic_regex]; the object's internal 
finite state machine is constructed from the regular expression contained 
in the null-terminated string /p/, and interpreted according to the 
[link boost_regex.ref.syntax_option_type option 
flags] specified in /f/. 

[table Postconditions for basic_regex construction
[[Element][Value]]
[[`empty()`][`false`]]
[[`size()`][`char_traits<charT>::length(p)`]]
[[`str()`][`basic_string<charT>(p)`]]
[[`flags()`][['f]]]
[[`mark_count()`][The number of marked sub-expressions within the expression.]]
]

[#boost_regex.basic_regex.construct3]

   basic_regex(const charT* p1, const charT* p2, 
               flag_type f = regex_constants::normal);

[*Requires]: /p1/ and /p2/ are not null pointers, `p1 < p2`.

[*Throws]: bad_expression if \[p1,p2) is not a valid regular expression, unless 
the flag `no_except` is set in /f/.

[*Effects]: Constructs an object of class [basic_regex]; the object's 
internal finite state machine is constructed from the regular expression 
contained in the sequence of characters \[p1,p2), and interpreted according the 
[link boost_regex.ref.syntax_option_type option flags] specified in /f/. 

[table Postconditions for basic_regex construction
[[Element][Value]]
[[`empty()`][`false`]]
[[`size()`][`std::distance(p1,p2)`]]
[[`str()`][`basic_string<charT>(p1,p2)`]]
[[`flags()`][['f]]]
[[`mark_count()`][The number of marked sub-expressions within the expression.]]
]

[#boost_regex.basic_regex.construct4]

   basic_regex(const charT* p, size_type len, flag_type f);

[*Requires]: /p/ shall not be a null pointer, `len < max_size()`.

[*Throws]: [bad_expression] if /p/ is not a valid regular expression, unless 
the flag `no_except` is set in /f/.

[*Effects]: Constructs an object of class [basic_regex]; the object's 
internal finite state machine is constructed from the regular expression 
contained in the sequence of characters \[p, p+len), and interpreted 
according the option flags specified in /f/. 

[table Postconditions for basic_regex construction
[[Element][Value]]
[[`empty()`][`false`]]
[[`size()`][['len]]]
[[`str()`][`basic_string<charT>(p, len)`]]
[[`flags()`][['f]]]
[[`mark_count()`][The number of marked sub-expressions within the expression.]]
]

[#boost_regex.basic_regex.construct5]

   basic_regex(const basic_regex& e);

[*Effects]: Constructs an object of class [basic_regex] as a copy of the object 
/e/. 

[#boost_regex.basic_regex.construct6]

   template <class ST, class SA>
   basic_regex(const basic_string<charT, ST, SA>& s, 
               flag_type f = regex_constants::normal);

[*Throws]: [bad_expression] if /s/ is not a valid regular expression, 
unless the flag `no_except` is set in /f/.

[*Effects]: Constructs an object of class [basic_regex]; the object's 
internal finite state machine is constructed from the regular expression 
contained in the string /s/, and interpreted according to the [link boost_regex.ref.syntax_option_type option 
flags] specified in /f/. 

[table Postconditions for basic_regex construction
[[Element][Value]]
[[`empty()`][`false`]]
[[`size()`][`s.size()`]]
[[`str()`][['s]]]
[[`flags()`][['f]]]
[[`mark_count()`][The number of marked sub-expressions within the expression.]]
]

[#boost_regex.basic_regex.construct7]

   template <class ForwardIterator>
   basic_regex(ForwardIterator first, ForwardIterator last, 
               flag_type f = regex_constants::normal);

[*Throws]: [bad_expression] if the sequence \[first, last) is not a valid 
regular expression, unless the flag `no_except` is set in /f/.

[*Effects]: Constructs an object of class [basic_regex]; the object's 
internal finite state machine is constructed from the regular expression 
contained in the sequence of characters \[first, last), and interpreted 
according to the [link boost_regex.ref.syntax_option_type option flags] specified in /f/. 

[table Postconditions for basic_regex construction
[[Element][Value]]
[[`empty()`][`false`]]
[[`size()`][`distance(first,last)`]]
[[`str()`][`basic_string<charT>(first,last)`]]
[[`flags()`][['f]]]
[[`mark_count()`][The number of marked sub-expressions within the expression.]]
]

[#boost_regex.basic_regex.opeq1]

   basic_regex& operator=(const basic_regex& e);

[*Effects]: Returns the result of `assign(e.str(), e.flags())`.

[#boost_regex.basic_regex.opeq2]

   basic_regex& operator=(const charT* ptr);

[*Requires]: /p/ shall not be a null pointer.

[*Effects]: Returns the result of `assign(ptr)`.

[#boost_regex.basic_regex.opeq3]

   template <class ST, class SA>
   basic_regex& operator=(const basic_string<charT, ST, SA>& p);

[*Effects]: Returns the result of `assign(p)`.

[#boost_regex.basic_regex.begin]

   const_iterator begin() const;

[*Effects]: Returns a starting iterator to a sequence of characters representing 
the regular expression.

[#boost_regex.basic_regex.end]

   const_iterator end() const;

[*Effects]: Returns termination iterator to a sequence of characters representing 
the regular expression.

[#boost_regex.basic_regex.size]

   size_type size() const;

[*Effects]: Returns the length of the sequence of characters representing the regular expression.

[#boost_regex.basic_regex.max_size]

   size_type max_size() const;

[*Effects]: Returns the maximum length of the sequence of characters representing 
the regular expression.

[#boost_regex.basic_regex.empty]

   bool empty() const;

[*Effects]: Returns true if the object does not contain a valid regular expression, 
otherwise false.

[#boost_regex.basic_regex.mark_count]

   unsigned mark_count() const;

[*Effects]: Returns the number of marked sub-expressions within the regular expresion.

[#boost_regex.basic_regex.assign1]

   basic_regex& assign(const basic_regex& that);

[*Effects]: Returns [link boost_regex.basic_regex.assign4 `assign(that.str(), that.flags())`].

[#boost_regex.basic_regex.assign2]

   basic_regex& assign(const charT* ptr, flag_type f = regex_constants::normal);

[*Effects]: Returns [link boost_regex.basic_regex.assign4 `assign(string_type(ptr), f)`].

[#boost_regex.basic_regex.assign3]

   basic_regex& assign(const charT* ptr, unsigned int len, flag_type f);

[*Effects]: Returns [link boost_regex.basic_regex.assign4 `assign(string_type(ptr, len), f)`].

[#boost_regex.basic_regex.assign4]

   template <class string_traits, class A>
   basic_regex& assign(const basic_string<charT, string_traits, A>& s,
                     flag_type f = regex_constants::normal);

[*Throws]: [bad_expression] if /s/ is not a valid regular expression, 
unless the flag `no_except` is set in /f/.

[*Returns]: *this.

[*Effects]: Assigns the regular expression contained in the string /s/, 
interpreted according the [link boost_regex.ref.syntax_option_type option flags] 
specified in /f/. 

[table Postconditions for basic_regex::assign
[[Element][Value]]
[[`empty()`][`false`]]
[[`size()`][`s.size()`]]
[[`str()`][['s]]]
[[`flags()`][['f]]]
[[`mark_count()`][The number of marked sub-expressions within the expression.]]
]

[#boost_regex.basic_regex.assign5]

   template <class InputIterator>
   basic_regex& assign(InputIterator first, InputIterator last,
                       flag_type f = regex_constants::normal);

[*Requires]: The type `InputIterator` corresponds to the 
[@http://input_iterator Input Iterator requirements 
(24.1.1)].

[*Effects]: Returns [link boost_regex.basic_regex.assign4 `assign(string_type(first, last), f)`].

[#boost_regex.basic_regex.flags]

   flag_type flags() const;

[*Effects]: Returns a copy of the [link boost_regex.ref.syntax_option_type 
regular expression syntax flags] that were passed to the object's constructor, 
or the last call to `assign`.

[#boost_regex.basic_regex.status]

   int status() const;

[*Effects]: Returns zero if the expression contains a valid regular expression, 
otherwise an error code.  This member function is retained for use in 
environments that cannot use exception handling.

[#boost_regex.basic_regex.str]

   basic_string<charT> str() const;

[*Effects]: Returns a copy of the character sequence passed to the object's constructor, 
or the last call to assign.

[#boost_regex.basic_regex.compare]

   int compare(basic_regex& e)const;

[*Effects]: If `flags() == e.flags()` then returns `str().compare(e.str())`, 
otherwise returns `flags() - e.flags()`.

[#boost_regex.basic_regex.imbue]

   locale_type imbue(locale_type l);

[*Effects]: Returns the result of `traits_inst.imbue(l)` where `traits_inst` is 
a (default initialized) instance of the template parameter `traits` stored 
within the object. Calls to `imbue` invalidate any currently contained 
regular expression.

[*Postcondition]: `empty() == true`.

[#boost_regex.basic_regex.getloc]

   locale_type getloc() const;

[*Effects]: Returns the result of `traits_inst.getloc()` where `traits_inst` is 
a (default initialized) instance of the template parameter traits stored 
within the object.

[#boost_regex.basic_regex.swap]

   void swap(basic_regex& e) throw();

[*Effects]: Swaps the contents of the two regular expressions.

[*Postcondition]: `*this` contains the regular expression that was in /e/, /e/ contains 
the regular expression that was in `*this`.

[*Complexity]: constant time.

[note Comparisons between [basic_regex] objects are provided on an 
experimental basis: please note that these are not present in the [tr1], 
so use with care if you are writing code that may need to be ported
to other implementations of [basic_regex].]

[#boost_regex.basic_regex.op_eq]

   template <class charT, class traits>
   bool operator == (const basic_regex<charT, traits>& lhs,
                     const basic_regex<charT, traits>& rhs);

[*Effects]: Returns `lhs.compare(rhs) == 0`.

[#boost_regex.basic_regex.op_ne]

   template <class charT, class traits>
   bool operator != (const basic_regex<charT, traits>& lhs,
                     const basic_regex<charT, traits>& rhs);

[*Effects]: Returns `lhs.compare(rhs) != 0`.

[#boost_regex.basic_regex.op_lt]

   template <class charT, class traits>
   bool operator < (const basic_regex<charT, traits>& lhs,
                  const basic_regex<charT, traits>& rhs);

[*Effects]: Returns `lhs.compare(rhs) < 0`.

[#boost_regex.basic_regex.op_le]

   template <class charT, class traits>
   bool operator <= (const basic_regex<charT, traits>& lhs,
                     const basic_regex<charT, traits>& rhs);

[*Effects]: Returns `lhs.compare(rhs) <= 0`.

[#boost_regex.basic_regex.op_ge]

   template <class charT, class traits>
   bool operator >= (const basic_regex<charT, traits>& lhs,
                     const basic_regex<charT, traits>& rhs);

[*Effects]: Returns `lhs.compare(rhs) >= 0`.

[#boost_regex.basic_regex.op_gt]

   template <class charT, class traits>
   bool operator > (const basic_regex<charT, traits>& lhs,
                  const basic_regex<charT, traits>& rhs);

[*Effects]: Returns `lhs.compare(rhs) > 0`.

[note The basic_regex stream inserter is provided on an experimental basis, 
and outputs the textual representation of the expression to the stream.]

[#boost_regex.basic_regex.op_stream]

   template <class charT, class io_traits, class re_traits>
   basic_ostream<charT, io_traits>&
      operator << (basic_ostream<charT, io_traits>& os
                  const basic_regex<charT, re_traits>& e);

[*Effects]: Returns `(os << e.str())`.

[#boost_regex.basic_regex.op_swap]

   template <class charT, class traits>
   void swap(basic_regex<charT, traits>& lhs,
            basic_regex<charT, traits>& rhs);

[*Effects]: calls `lhs.swap(rhs)`.

[endsect]

