diff --git a/doc/html/declval.html b/doc/html/declval.html deleted file mode 100644 index 305cf36..0000000 --- a/doc/html/declval.html +++ /dev/null @@ -1,178 +0,0 @@ - - - -Declval - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-
-
-
-

-Declval

-
-

-Howard Hinnant -

-

-Vicente J. Botet Escriba -

-
-
-
-
-

- 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) -

-
-
-
-
-
-

Table of Contents

-
-
Overview
-
Reference
-
History
-
-
-
- -

- The motivation for declval - was introduced in N2958: - Moving Swap Forward. Here follows a rewording of this chapter. -

-

- With the provision of decltype, late-specified return types, and default template-arguments - for function templates a new generation of SFINAE patterns will emerge to at - least partially compensate the lack of concepts on the C++0x timescale. Using - this technique, it is sometimes necessary to obtain an object of a known type - in a non-using context, e.g. given the declaration -

-
template<class T>
-T&& declval(); // not used
-
-

- as part of the function template declaration -

-
template<class To, class From>
-decltype(static_cast<To>(declval<From>())) convert(From&&);
-
-

- or as part of a class template definition -

-
template<class> class result_of;
-
-template<class Fn, class... ArgTypes>
-struct result_of<Fn(ArgTypes...)>
-{
-  typedef decltype(declval<Fn>()(declval<ArgTypes>()...)) type;
-};
-
-

- The role of the function template declval() is a transformation of a type T - into a value without using or evaluating this function. The name is supposed - to direct the reader's attention to the fact that the expression declval<T>() is - an lvalue if and only if T is an lvalue-reference, otherwise an rvalue. To - extend the domain of this function we can do a bit better by changing its declaration - to -

-
template<class T>
-typename std::add_rvalue_reference<T>::type declval(); // not used
-
-

- which ensures that we can also use cv void as template parameter. The careful - reader might have noticed that declval() already exists under the name create() as - part of the definition of the semantics of the type trait is_convertible in - the C++0x standard. -

-

- The provision of a new library component that allows the production of values - in unevaluated expressions is considered important to realize constrained templates - in C++0x where concepts are not available. This extremely light-weight function - is expected to be part of the daily tool-box of the C++0x programmer. -

-
-
- -

- #include <boost/utility/declval.hpp> -

-
namespace boost {
-
-    template <typename T>
-    typename add_rvalue_reference<T>::type declval() noexcept; // as unevaluated operand
-
-}  // namespace boost
-
-

- The library provides the function template declval to simplify the definition - of expressions which occur as unevaluated operands. -

-
template <typename T>
-typename add_rvalue_reference<T>::type declval();
-
-

- Remarks: If this function is used, the program - is ill-formed. -

-

- Remarks: The template parameter T of declval - may be an incomplete type. -

-

- Example: -

-
template <class To, class From>
-decltype(static_cast<To>(declval<From>())) convert(From&&);
-
-

- Declares a function template convert which only participates in overloading - if the type From can be explicitly converted to type To. -

-
-
- -

- - boost - 1.50 -

-

- Fixes: -

-
  • - #6570 - Adding noexcept to boost::declval. -
-
-
- - - -

Last revised: November 23, 2013 at 14:11:12 GMT

-
-
- - diff --git a/doc/html/string_ref.html b/doc/html/string_ref.html deleted file mode 100644 index 3352614..0000000 --- a/doc/html/string_ref.html +++ /dev/null @@ -1,280 +0,0 @@ - - - -String_Ref - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-
-
-
-

-String_Ref

-

-Marshall Clow -

-
-
-

- 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) -

-
-
-
-
-
-

Table of Contents

-
-
Overview
-
Examples
-
Reference
-
History
-
-
-
- -

- Boost.StringRef is an implementation of Jeffrey Yaskin's N3442: - string_ref: a non-owning reference to a string. -

-

- When you are parsing/processing strings from some external source, frequently - you want to pass a piece of text to a procedure for specialized processing. - The canonical way to do this is as a std::string, - but that has certain drawbacks: -

-

- 1) If you are processing a buffer of text (say a HTTP response or the contents - of a file), then you have to create the string from the text you want to pass, - which involves memory allocation and copying of data. -

-

- 2) if a routine receives a constant std::string - and wants to pass a portion of that string to another routine, then it must - create a new string of that substring. -

-

- 3) A routine receives a constant std::string - and wants to return a portion of the string, then it must create a new string - to return. -

-

- string_ref is designed to solve - these efficiency problems. A string_ref - is a read-only reference to a contiguous sequence of characters, and provides - much of the functionality of std::string. - A string_ref is cheap to create, - copy and pass by value, because it does not actually own the storage that it - points to. -

-

- A string_ref is implemented - as a small struct that contains a pointer to the start of the character data - and a count. A string_ref is - cheap to create and cheap to copy. -

-

- string_ref acts as a container; - it includes all the methods that you would expect in a container, including - iteration support, operator [], - at and size. - It can be used with any of the iterator-based algorithms in the STL - as long - as you don't need to change the underlying data (sort - and remove, for example, will - not work) -

-

- Besides generic container functionality, string_ref - provides a subset of the interface of std::string. - This makes it easy to replace parameters of type const - std::string & - with boost::string_ref. Like std::string, - string_ref has a static member - variable named npos to denote - the result of failed searches, and to mean "the end". -

-

- Because a string_ref does not - own the data that it "points to", it introduces lifetime issues into - code that uses it. The programmer must ensure that the data that a string_ref refers to exists as long as the - string_ref does. -

-
-
- -

- Integrating string_ref into - your code is fairly simple. Wherever you pass a const - std::string & - or std::string as a parameter, that's a candidate - for passing a boost::string_ref. -

-
std::string extract_part ( const std::string &bar ) {
-    return bar.substr ( 2, 3 );
-    }
-
-if ( extract_part ( "ABCDEFG" ).front() == 'C' ) { /* do something */ }
-
-

- Let's figure out what happens in this (contrived) example. -

-

- First, a temporary string is created from the string literal "ABCDEFG", and it is passed (by reference) - to the routine extract_part. - Then a second string is created in the call std::string::substr - and returned to extract_part - (this copy may be elided by RVO). Then extract_part - returns that string back to the caller (again this copy may be elided). The - first temporary string is deallocated, and front - is called on the second string, and then it is deallocated as well. -

-

- Two std::strings are created, and two copy operations. - That's (potentially) four memory allocations and deallocations, and the associated - copying of data. -

-

- Now let's look at the same code with string_ref: -

-
boost::string_ref extract_part ( boost::string_ref bar ) {
-    return bar.substr ( 2, 3 );
-    }
-
-if ( extract_part ( "ABCDEFG" ).front() == "C" ) { /* do something */ }
-
-

- No memory allocations. No copying of character data. No changes to the code - other than the types. There are two string_refs - created, and two string_refs - copied, but those are cheap operations. -

-
-
- -

- The header file "string_ref.hpp" defines a template boost::basic_string_ref, - and four specializations - for char - / wchar_t / char16_t - / char32_t . -

-

- #include <boost/utility/string_ref.hpp> -

-

- Construction and copying: -

-
BOOST_CONSTEXPR basic_string_ref ();    // Constructs an empty string_ref
-BOOST_CONSTEXPR basic_string_ref(const charT* str); // Constructs from a NULL-terminated string
-BOOST_CONSTEXPR basic_string_ref(const charT* str, size_type len); // Constructs from a pointer, length pair
-template<typename Allocator>
-basic_string_ref(const std::basic_string<charT, traits, Allocator>& str); // Constructs from a std::string
-basic_string_ref (const basic_string_ref &rhs);
-basic_string_ref& operator=(const basic_string_ref &rhs);
-
-

- string_ref does not define - a move constructor nor a move-assignment operator because copying a string_ref is just a cheap as moving one. -

-

- Basic container-like functions: -

-
BOOST_CONSTEXPR size_type size()     const ;
-BOOST_CONSTEXPR size_type length()   const ;
-BOOST_CONSTEXPR size_type max_size() const ;
-BOOST_CONSTEXPR bool empty()         const ;
-
-// All iterators are const_iterators
-BOOST_CONSTEXPR const_iterator  begin() const ;
-BOOST_CONSTEXPR const_iterator cbegin() const ;
-BOOST_CONSTEXPR const_iterator    end() const ;
-BOOST_CONSTEXPR const_iterator   cend() const ;
-const_reverse_iterator         rbegin() const ;
-const_reverse_iterator        crbegin() const ;
-const_reverse_iterator           rend() const ;
-const_reverse_iterator          crend() const ;
-
-

- Access to the individual elements (all of which are const): -

-
BOOST_CONSTEXPR const charT& operator[](size_type pos) const ;
-const charT& at(size_t pos) const ;
-BOOST_CONSTEXPR const charT& front() const ;
-BOOST_CONSTEXPR const charT& back()  const ;
-BOOST_CONSTEXPR const charT* data()  const ;
-
-

- Modifying the string_ref (but - not the underlying data): -

-
void clear();
-void remove_prefix(size_type n);
-void remove_suffix(size_type n);
-
-

- Searching: -

-
size_type find(basic_string_ref s) const ;
-size_type find(charT c) const ;
-size_type rfind(basic_string_ref s) const ;
-size_type rfind(charT c) const ;
-size_type find_first_of(charT c) const ;
-size_type find_last_of (charT c) const ;
-
-size_type find_first_of(basic_string_ref s) const ;
-size_type find_last_of(basic_string_ref s) const ;
-size_type find_first_not_of(basic_string_ref s) const ;
-size_type find_first_not_of(charT c) const ;
-size_type find_last_not_of(basic_string_ref s) const ;
-size_type find_last_not_of(charT c) const ;
-
-

- String-like operations: -

-
BOOST_CONSTEXPR basic_string_ref substr(size_type pos, size_type n=npos) const ; // Creates a new string_ref
-bool starts_with(charT c) const ;
-bool starts_with(basic_string_ref x) const ;
-bool ends_with(charT c) const ;
-bool ends_with(basic_string_ref x) const ;
-
-
-
- -

- - boost - 1.53 -

-
  • - Introduced -
-
-
- - - -

Last revised: November 23, 2013 at 14:12:56 GMT

-
-
- -