366 Commits

Author SHA1 Message Date
Andrey Semashev
2722fdcda3 Use std::iterator_traits to detect iterators, when possible.
This allows next/prior to detect user's iterators that do not
define iterator_category nested type but specialize
std::iterator_traits instead.
2017-07-23 20:29:25 +03:00
Andrey Semashev
e25d85446e Use Boost.Iterator to advance iterators.
By using Boost.Iterator we rely on the separate traversal category instead of
the standard iterator category to advance iterators efficiently. For instance,
this allows to advance transform iterators over a random access sequence
in constant time, despite that they are formally input iterators.

Also, std::reverse_iterator formally requires at least bidirectional iterator
as the underlying iterator type. Transform iterators from the example above
don't qualify, so potentially std::reverse_iterator could fail to compile.
2017-07-12 21:15:20 +03:00
Andrey Semashev
5bc9e47688 Changed iterator_category nested type detection to work with MSVC and different versions of gcc. 2017-07-12 20:14:48 +03:00
Andrey Semashev
6cf9c22cf1 Reworked iterator handling in next/prior helpers.
The new implementation tries to detect if the incremented/decremented type
is an iterator first and if not falls back to operator probing. This way
iterators that are not SFINAE-friendly (i.e. unconditionally define
arithmetic operators regardless of the iterator category) are still treated
as iterators through std::advance and do not fail the compilation.

The iterator detection is based on probing for the nested iterator_category
type that is expected to be present in class-type iterators. This heuristic
is not flawless since iterators are not required to defined this type.
User-defined iterators may not have it and instead specialize
std::iterator_traits. This use case is not covered by the current implementation
and will likely fail to compile. With C++17 SFINAE-friendly std::iterator_traits
this can be fixed, but currently Boost.Config lacks the macro to detect
availability of this feature. Support for it can be added by a later commit.

Also simplified boost::prior for iterators, removing the possibility of
integer overflow caused by negation of the distance value.
2017-07-09 03:10:01 +03:00
Peter Dimov
21261a8630 Add visible dependency to result_of_iterate.hpp 2017-05-30 01:20:02 +03:00
Marshall Clow
330b49d602 Mark comparison operators for string_view as constexpr; add tests. Reference: https://svn.boost.org/trac/boost/ticket/12896 2017-05-03 19:58:02 -07:00
Marshall Clow
68b26cddbe Merge branch 'develop' of github.com:boostorg/utility into develop 2017-04-06 07:59:12 -07:00
Marshall Clow
6c4ab93573 Revert change disallowing construction of string_view/string_ref from rvalue string 2017-03-28 15:17:09 +02:00
Marshall Clow
0876da45db Fix potential overflow in substr; Trac #11536. Also change string_view::copy to use the traits::copy 2017-02-13 10:49:17 -08:00
Marshall Clow
00f02167e3 Add tests to ensure that string_view|ref from rvalue fails (whenever it can) 2017-02-13 10:25:04 -08:00
Marshall Clow
9960d9f395 Don't construct string_view|string_ref from rvalue string. That way lies pain 2017-02-13 08:15:44 -08:00
Marcel Raad
c5c479d49c Use non-deprecated include paths
According to the comments in these two headers, the files in the core directory should be used instead.
2016-12-21 08:22:35 +01:00
Surogate
38121f2af3 Allow string_view::at() to be constexpr again on VS2015
VS2015 doesn't support extended constexpr. Thanks to Lastique for the
ternary trick
2016-12-12 23:45:34 +01:00
Surogate
38b536ff05 Fixing visual studio compilation of string_view::at()
VS2013, VS2015 & VS2017RC don't like the ternary throwing an exception :
'return': cannot convert from 'void' to 'const char &'
Now using classic if when compiling on a windows platform.
2016-12-12 22:57:56 +01:00
zerotypos-found
816607e212 Remove tabs and Non-ASCII characters. 2016-11-15 11:59:51 +09:00
Peter Dimov
ff445c0ece Remove std::binary_function use, it has been removed in C++17 2016-11-06 14:38:13 +02:00
Andrey Semashev
21dc552cf9 Added a workaround for gcc 4.6 in C++11 mode as it can't seem to handle defaulted functions with noexcept specifier. The problem was discovered with autotests. 2016-09-02 19:14:00 +03:00
Andrey Semashev
4814d1ebfe Added another overload of to_string when default function template arguments are not supported.
The additional overload more closely emulates the official interface and allows to construct strings with custom allocators.
2016-09-01 22:08:28 +03:00
gnaggnoyil
e5932ebb08 fix compile error on basic_string_view::to_string when Allocator is user-defined 2016-09-01 21:56:20 +03:00
Marshall Clow
39577f86d1 Fix rfind (and other finders). Fixes bug https://svn.boost.org/trac/boost/ticket/9518 2016-08-14 11:20:28 -07:00
Marshall Clow
8392991c46 Remove extraneous semicolon; no functional change 2016-08-14 11:19:32 -07:00
Marshall Clow
c5b1256650 rename routines in detail namespace so that someone who includes both <string_ref> and <string_view> won't get duplicate decls 2016-08-14 11:11:12 -07:00
Marshall Clow
c56dd13592 Mark the copy ctor/assignment operator as '= default' when the compiler supports it. This makes these types trivially copy/move assignable/constructible. See https://svn.boost.org/trac/boost/ticket/11684 2016-07-27 11:18:18 -07:00
Marshall Clow
181f302ee4 Fix Ticket 12140; mark only single-arg ctor as explicit. Thanks to Thimo for the patch. 2016-06-15 15:50:21 -07:00
Marshall Clow
0b492bee9c Re-install string_ref - to be removed in the future 2016-04-14 07:50:28 -07:00
Andrey Semashev
a9236d00a9 Ensure the file ends with a newline. Fixes compiler warnings. 2016-03-26 14:00:12 +03:00
Daniel Frey
1dfacff7ec Renamed namespace detail to operators_detail 2016-02-23 20:30:16 +01:00
Daniel Frey
d767054a79 Merge branch 'develop' of github.com:boostorg/utility into develop 2016-02-22 20:39:26 +01:00
Daniel Frey
08a1b7da61 Added ADL protector 2016-02-22 20:39:16 +01:00
Marshall Clow
8ab8e36dcf Remove the 'basic_string_ref template; use 'basic_string_view' instead. Keep the string_ref, etc typedefs around, though 2016-02-17 11:32:16 -08:00
Marshall Clow
1caa745dd7 Introduce new 'string_view' to match the one in the standard. Step #2 (up next) is to retire string_ref in favor of string_view 2015-12-21 11:39:59 -08:00
Andrey Semashev
cf5ad341ed Added a missing include. 2015-09-11 19:31:18 +03:00
Marcel Raad
cb6500161b Remove deprecated include
All that boost/iterator.hpp does is pull std::iterator into namespace boost. A comment in that header mentions: "This header is obsolete and will be deprecated."
2015-09-11 17:49:23 +02:00
Marshall Clow
13610caa36 Update copyright notice; change to_string to avoid UB by calling a different constructor. Fixes #11150 2015-03-28 12:02:41 -07:00
Andrey Semashev
651a869d4f Reworked next() and prior() taking the distance arguments.
The new version should provide the expected behavior in the case (prior(v.end(), v.size()) == v.begin()). It should also work with integers now, as was originally intended by David Abrahams. Added tests to verify these new use cases.
2014-06-24 01:05:32 +04:00
Andrey Semashev
f1edd107eb Merge pull request #12 from K-ballo/base-from-ref-member
Added base_from_member specialization for members of lvalue-reference types.
2014-06-12 03:54:08 +04:00
K-ballo
4531b2a2a6 Ported compressed_pair documentation to Quickbook 2014-06-11 19:48:23 -03:00
K-ballo
51e482edfe Added base_from_member specialization for members of lvalue-reference type 2014-06-11 18:55:12 -03:00
Peter Dimov
87bc4c8dce Remove declval.hpp, moved to type_traits. 2014-06-05 17:41:17 +03:00
Peter Dimov
34c11cb995 Remove generator_iterator.hpp, as it has been moved to iterator. 2014-06-05 02:34:39 +03:00
Andrey Semashev
10b8041472 boost::swap, boost::empty_deleter and explicit operator bool macros moved from Boost.Utility to Boost.Core. 2014-06-01 22:44:30 +04:00
Peter Dimov
1ed9aaa2a4 Remove headers that have been moved into core. 2014-06-01 03:22:30 +03:00
Andrey Semashev
df8e0c2dae Merge pull request #5 from Lastique/patch-1
Fix compilation with gcc 4.5 in C++11 mode
2014-05-10 08:59:10 +04:00
Andrey Semashev
f5869d0f82 Merge pull request #6 from Lastique/develop
Added a new macro BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT
2014-05-10 08:57:32 +04:00
Eric Niebler
379e2111e2 value_init and swap work on nvidia gpu's 2014-05-01 15:29:43 -07:00
Andrey Semashev
d1bfa8e7b0 Added a new macro BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT, which implements a noexcept operator. Also added explicit noexcept specification for the constexpr macro. 2014-04-26 15:11:35 +04:00
Eric Niebler
de0e18ca0a work around nvcc bug by only defining has_result when it's needed 2014-04-23 15:54:27 -07:00
Andrey Semashev
8ae3bfa961 Fix compilation with gcc 4.5 in C++11 mode
Gcc 4.5 does not allow non-public defaulted functions, so fall back to the C++03 version. Also replaced the deprecated macros with the new ones and adjusted formatting.
2014-04-10 00:27:41 +04:00
Peter Dimov
d4b5fde5a8 Remove assert from utility 2014-02-09 17:56:48 +02:00
Peter Dimov
b434003b13 Revert incorrect reversion of adf57817ec09cb8edd6032a30da6daec3edbe23f 2013-12-11 23:28:13 +02:00