mirror of
https://github.com/boostorg/iterator.git
synced 2025-07-26 02:47:34 +02:00
Compare commits
41 Commits
revert-16-
...
boost-1.65
Author | SHA1 | Date | |
---|---|---|---|
ed027c2cce | |||
4791425000 | |||
b7e7e83a11 | |||
c148962bd9 | |||
5bfbfb7716 | |||
af5f6e49e0 | |||
26ee5ba754 | |||
67a2336cf4 | |||
029277f3ed | |||
847b2a1be3 | |||
18268069d9 | |||
bb54ee7900 | |||
d5b67c7fab | |||
663a30f659 | |||
177f719d15 | |||
cccbd8c6aa | |||
d6cfed4b20 | |||
514ac53326 | |||
ca3b7505ce | |||
d7c8cccd64 | |||
7b627fa679 | |||
760da84f9c | |||
89d3ec7662 | |||
c86db2ec8a | |||
0a18cfb255 | |||
11e3715f37 | |||
f2d07f76b5 | |||
53e8ac401f | |||
434818cce7 | |||
c09c8ca2b2 | |||
22dd100dfd | |||
2f72016049 | |||
5b26a8b3fc | |||
711a0232f8 | |||
443dfb9901 | |||
c734f3bfa3 | |||
b2b9ab1568 | |||
8b23342969 | |||
ece225bbda | |||
46f9e1753f | |||
4283d20261 |
40
.travis.yml
Normal file
40
.travis.yml
Normal file
@ -0,0 +1,40 @@
|
||||
# Copyright 2016 Peter Dimov
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
language: cpp
|
||||
|
||||
sudo: false
|
||||
|
||||
python: "2.7"
|
||||
|
||||
os:
|
||||
- linux
|
||||
- osx
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- develop
|
||||
|
||||
install:
|
||||
- cd ..
|
||||
- git clone -b $TRAVIS_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
|
||||
- cd boost-root
|
||||
- git submodule update --init --depth 1 tools/build
|
||||
- git submodule update --init --depth 1 libs/config
|
||||
- git submodule update --init --depth 1 tools/boostdep
|
||||
- cp -r $TRAVIS_BUILD_DIR/* libs/iterator
|
||||
- python tools/boostdep/depinst/depinst.py iterator
|
||||
- ./bootstrap.sh
|
||||
- ./b2 headers
|
||||
|
||||
script:
|
||||
- TOOLSET=gcc,clang
|
||||
- if [ $TRAVIS_OS_NAME == osx ]; then TOOLSET=clang; fi
|
||||
- ./b2 --verbose-test libs/config/test//config_info toolset=$TOOLSET || true
|
||||
- ./b2 libs/iterator/test toolset=$TOOLSET
|
||||
|
||||
notifications:
|
||||
email:
|
||||
on_success: always
|
@ -20,4 +20,8 @@ boostbook standalone
|
||||
<format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/iterator/doc
|
||||
;
|
||||
|
||||
|
||||
###############################################################################
|
||||
alias boostdoc ;
|
||||
explicit boostdoc ;
|
||||
alias boostrelease : standalone ;
|
||||
explicit boostrelease ;
|
||||
|
@ -115,8 +115,8 @@ __ iterator_facade.pdf
|
||||
__ iterator_adaptor.pdf
|
||||
|
||||
Both |facade| and |adaptor| as well as many of the `specialized
|
||||
adaptors`_ mentioned below have been proposed for standardization,
|
||||
and accepted into the first C++ technical report; see our
|
||||
adaptors`_ mentioned below have been proposed for standardization;
|
||||
see our
|
||||
|
||||
`Standard Proposal For Iterator Facade and Adaptor`__ (PDF__)
|
||||
|
||||
|
84
include/boost/iterator/advance.hpp
Normal file
84
include/boost/iterator/advance.hpp
Normal file
@ -0,0 +1,84 @@
|
||||
// Copyright (C) 2017 Michel Morin.
|
||||
//
|
||||
// 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)
|
||||
|
||||
#ifndef BOOST_ITERATOR_ADVANCE_HPP
|
||||
#define BOOST_ITERATOR_ADVANCE_HPP
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/iterator/iterator_categories.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace iterators {
|
||||
|
||||
namespace detail {
|
||||
template <typename InputIterator, typename Distance>
|
||||
inline BOOST_CXX14_CONSTEXPR void
|
||||
advance_impl(
|
||||
InputIterator& it
|
||||
, Distance n
|
||||
, incrementable_traversal_tag
|
||||
)
|
||||
{
|
||||
while (n > 0) {
|
||||
++it;
|
||||
--n;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename BidirectionalIterator, typename Distance>
|
||||
inline BOOST_CXX14_CONSTEXPR void
|
||||
advance_impl(
|
||||
BidirectionalIterator& it
|
||||
, Distance n
|
||||
, bidirectional_traversal_tag
|
||||
)
|
||||
{
|
||||
if (n >= 0) {
|
||||
while (n > 0) {
|
||||
++it;
|
||||
--n;
|
||||
}
|
||||
}
|
||||
else {
|
||||
while (n < 0) {
|
||||
--it;
|
||||
++n;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template <typename RandomAccessIterator, typename Distance>
|
||||
inline BOOST_CXX14_CONSTEXPR void
|
||||
advance_impl(
|
||||
RandomAccessIterator& it
|
||||
, Distance n
|
||||
, random_access_traversal_tag
|
||||
)
|
||||
{
|
||||
it += n;
|
||||
}
|
||||
}
|
||||
|
||||
namespace advance_adl_barrier {
|
||||
template <typename InputIterator, typename Distance>
|
||||
inline BOOST_CXX14_CONSTEXPR void
|
||||
advance(InputIterator& it, Distance n)
|
||||
{
|
||||
detail::advance_impl(
|
||||
it, n, typename iterator_traversal<InputIterator>::type()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
using namespace advance_adl_barrier;
|
||||
|
||||
} // namespace iterators
|
||||
|
||||
using iterators::advance;
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#endif
|
65
include/boost/iterator/distance.hpp
Normal file
65
include/boost/iterator/distance.hpp
Normal file
@ -0,0 +1,65 @@
|
||||
// Copyright (C) 2017 Michel Morin.
|
||||
//
|
||||
// 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)
|
||||
|
||||
#ifndef BOOST_ITERATOR_DISTANCE_HPP
|
||||
#define BOOST_ITERATOR_DISTANCE_HPP
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/iterator/iterator_categories.hpp>
|
||||
#include <boost/iterator/iterator_traits.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace iterators {
|
||||
|
||||
namespace detail {
|
||||
template <typename SinglePassIterator>
|
||||
inline BOOST_CXX14_CONSTEXPR typename iterator_difference<SinglePassIterator>::type
|
||||
distance_impl(
|
||||
SinglePassIterator first
|
||||
, SinglePassIterator last
|
||||
, single_pass_traversal_tag
|
||||
)
|
||||
{
|
||||
typename iterator_difference<SinglePassIterator>::type n = 0;
|
||||
while (first != last) {
|
||||
++first;
|
||||
++n;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
template <typename RandomAccessIterator>
|
||||
inline BOOST_CXX14_CONSTEXPR typename iterator_difference<RandomAccessIterator>::type
|
||||
distance_impl(
|
||||
RandomAccessIterator first
|
||||
, RandomAccessIterator last
|
||||
, random_access_traversal_tag
|
||||
)
|
||||
{
|
||||
return last - first;
|
||||
}
|
||||
}
|
||||
|
||||
namespace distance_adl_barrier {
|
||||
template <typename SinglePassIterator>
|
||||
inline BOOST_CXX14_CONSTEXPR typename iterator_difference<SinglePassIterator>::type
|
||||
distance(SinglePassIterator first, SinglePassIterator last)
|
||||
{
|
||||
return detail::distance_impl(
|
||||
first, last, typename iterator_traversal<SinglePassIterator>::type()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
using namespace distance_adl_barrier;
|
||||
|
||||
} // namespace iterators
|
||||
|
||||
using iterators::distance;
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#endif
|
@ -9,6 +9,7 @@
|
||||
#ifndef BOOST_FUNCTION_INPUT_ITERATOR
|
||||
#define BOOST_FUNCTION_INPUT_ITERATOR
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/assert.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/function_types/is_function_pointer.hpp>
|
||||
@ -17,6 +18,7 @@
|
||||
#include <boost/iterator/iterator_facade.hpp>
|
||||
#include <boost/none.hpp>
|
||||
#include <boost/optional/optional.hpp>
|
||||
#include <boost/utility/result_of.hpp>
|
||||
|
||||
namespace boost {
|
||||
|
||||
@ -28,9 +30,9 @@ namespace iterators {
|
||||
class function_input_iterator
|
||||
: public iterator_facade<
|
||||
function_input_iterator<Function, Input>,
|
||||
typename Function::result_type,
|
||||
BOOST_DEDUCED_TYPENAME result_of<Function ()>::type,
|
||||
single_pass_traversal_tag,
|
||||
typename Function::result_type const &
|
||||
BOOST_DEDUCED_TYPENAME result_of<Function ()>::type const &
|
||||
>
|
||||
{
|
||||
public:
|
||||
@ -46,7 +48,7 @@ namespace iterators {
|
||||
++state;
|
||||
}
|
||||
|
||||
typename Function::result_type const &
|
||||
BOOST_DEDUCED_TYPENAME result_of<Function ()>::type const &
|
||||
dereference() const {
|
||||
return (value ? value : value = (*f)()).get();
|
||||
}
|
||||
@ -58,7 +60,7 @@ namespace iterators {
|
||||
private:
|
||||
Function * f;
|
||||
Input state;
|
||||
mutable optional<typename Function::result_type> value;
|
||||
mutable optional<BOOST_DEDUCED_TYPENAME result_of<Function ()>::type> value;
|
||||
};
|
||||
|
||||
template <class Function, class Input>
|
||||
|
@ -7,7 +7,6 @@
|
||||
#ifndef BOOST_REVERSE_ITERATOR_23022003THW_HPP
|
||||
#define BOOST_REVERSE_ITERATOR_23022003THW_HPP
|
||||
|
||||
#include <boost/next_prior.hpp>
|
||||
#include <boost/iterator.hpp>
|
||||
#include <boost/iterator/iterator_adaptor.hpp>
|
||||
|
||||
@ -40,14 +39,19 @@ namespace iterators {
|
||||
{}
|
||||
|
||||
private:
|
||||
typename super_t::reference dereference() const { return *boost::prior(this->base()); }
|
||||
typename super_t::reference dereference() const
|
||||
{
|
||||
Iterator it = this->base_reference();
|
||||
--it;
|
||||
return *it;
|
||||
}
|
||||
|
||||
void increment() { --this->base_reference(); }
|
||||
void decrement() { ++this->base_reference(); }
|
||||
|
||||
void advance(typename super_t::difference_type n)
|
||||
{
|
||||
this->base_reference() += -n;
|
||||
this->base_reference() -= n;
|
||||
}
|
||||
|
||||
template <class OtherIterator>
|
||||
|
@ -84,7 +84,7 @@ namespace iterators {
|
||||
struct result<This(Iterator)>
|
||||
{
|
||||
typedef typename
|
||||
remove_reference<typename remove_cv<Iterator>::type>::type
|
||||
remove_cv<typename remove_reference<Iterator>::type>::type
|
||||
iterator;
|
||||
|
||||
typedef typename iterator_reference<iterator>::type type;
|
||||
|
@ -55,4 +55,7 @@ test-suite iterator
|
||||
|
||||
[ run minimum_category.cpp ]
|
||||
[ compile-fail minimum_category_compile_fail.cpp ]
|
||||
|
||||
[ run advance_test.cpp ]
|
||||
[ run distance_test.cpp ]
|
||||
;
|
||||
|
91
test/advance_test.cpp
Normal file
91
test/advance_test.cpp
Normal file
@ -0,0 +1,91 @@
|
||||
// Copyright (C) 2017 Michel Morin.
|
||||
//
|
||||
// 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)
|
||||
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <boost/container/slist.hpp>
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
#include <boost/iterator/advance.hpp>
|
||||
#include <boost/iterator/transform_iterator.hpp>
|
||||
|
||||
int twice(int x) { return x + x; }
|
||||
|
||||
template <typename Iterator>
|
||||
void test_advance(Iterator it_from, Iterator it_to, int n)
|
||||
{
|
||||
boost::advance(it_from, n);
|
||||
BOOST_TEST(it_from == it_to);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int array[3] = {1, 2, 3};
|
||||
int* ptr1 = array;
|
||||
int* ptr2 = array + 3;
|
||||
|
||||
{
|
||||
test_advance(ptr1, ptr2, 3);
|
||||
test_advance(ptr2, ptr1, -3);
|
||||
|
||||
test_advance(
|
||||
boost::make_transform_iterator(ptr1, twice)
|
||||
, boost::make_transform_iterator(ptr2, twice)
|
||||
, 3
|
||||
);
|
||||
test_advance(
|
||||
boost::make_transform_iterator(ptr2, twice)
|
||||
, boost::make_transform_iterator(ptr1, twice)
|
||||
, -3
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
std::vector<int> ints(ptr1, ptr2);
|
||||
test_advance(ints.begin(), ints.end(), 3);
|
||||
test_advance(ints.end(), ints.begin(), -3);
|
||||
|
||||
test_advance(
|
||||
boost::make_transform_iterator(ints.begin(), twice)
|
||||
, boost::make_transform_iterator(ints.end(), twice)
|
||||
, 3
|
||||
);
|
||||
test_advance(
|
||||
boost::make_transform_iterator(ints.end(), twice)
|
||||
, boost::make_transform_iterator(ints.begin(), twice)
|
||||
, -3
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
std::list<int> ints(ptr1, ptr2);
|
||||
test_advance(ints.begin(), ints.end(), 3);
|
||||
test_advance(ints.end(), ints.begin(), -3);
|
||||
|
||||
test_advance(
|
||||
boost::make_transform_iterator(ints.begin(), twice)
|
||||
, boost::make_transform_iterator(ints.end(), twice)
|
||||
, 3
|
||||
);
|
||||
test_advance(
|
||||
boost::make_transform_iterator(ints.end(), twice)
|
||||
, boost::make_transform_iterator(ints.begin(), twice)
|
||||
, -3
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
boost::container::slist<int> ints(ptr1, ptr2);
|
||||
test_advance(ints.begin(), ints.end(), 3);
|
||||
|
||||
test_advance(
|
||||
boost::make_transform_iterator(ints.begin(), twice)
|
||||
, boost::make_transform_iterator(ints.end(), twice)
|
||||
, 3
|
||||
);
|
||||
}
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
@ -58,6 +58,18 @@ int main()
|
||||
BOOST_TEST(boost::fusion::at_c<1>(*(i + 1)) == "pyonpyon");
|
||||
}
|
||||
|
||||
{
|
||||
// Trac #12895
|
||||
boost::zip_iterator<
|
||||
TUPLE<int*, std::string*>
|
||||
> i(MAKE_TUPLE(vi.data(), vs.data()));
|
||||
|
||||
BOOST_TEST(boost::fusion::at_c<0>(* i ) == 42);
|
||||
BOOST_TEST(boost::fusion::at_c<1>(* i ) == "kokoro");
|
||||
BOOST_TEST(boost::fusion::at_c<0>(*(i + 1)) == 72);
|
||||
BOOST_TEST(boost::fusion::at_c<1>(*(i + 1)) == "pyonpyon");
|
||||
}
|
||||
|
||||
{
|
||||
boost::zip_iterator<iterator_tuple> i1(MAKE_TUPLE(vi.begin(), vs.begin()));
|
||||
boost::zip_iterator<iterator_tuple> i2(MAKE_TUPLE(vi.end(), vs.end()));
|
||||
|
84
test/distance_test.cpp
Normal file
84
test/distance_test.cpp
Normal file
@ -0,0 +1,84 @@
|
||||
// Copyright (C) 2017 Michel Morin.
|
||||
//
|
||||
// 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)
|
||||
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <boost/container/slist.hpp>
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
#include <boost/iterator/distance.hpp>
|
||||
#include <boost/iterator/transform_iterator.hpp>
|
||||
|
||||
int twice(int x) { return x + x; }
|
||||
|
||||
template <typename Iterator>
|
||||
void test_distance(Iterator it_from, Iterator it_to, int n)
|
||||
{
|
||||
BOOST_TEST(boost::distance(it_from, it_to) == n);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int array[3] = {1, 2, 3};
|
||||
int* ptr1 = array;
|
||||
int* ptr2 = array + 3;
|
||||
|
||||
{
|
||||
test_distance(ptr1, ptr2, 3);
|
||||
test_distance(ptr2, ptr1, -3);
|
||||
|
||||
test_distance(
|
||||
boost::make_transform_iterator(ptr1, twice)
|
||||
, boost::make_transform_iterator(ptr2, twice)
|
||||
, 3
|
||||
);
|
||||
test_distance(
|
||||
boost::make_transform_iterator(ptr2, twice)
|
||||
, boost::make_transform_iterator(ptr1, twice)
|
||||
, -3
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
std::vector<int> ints(ptr1, ptr2);
|
||||
test_distance(ints.begin(), ints.end(), 3);
|
||||
test_distance(ints.end(), ints.begin(), -3);
|
||||
|
||||
test_distance(
|
||||
boost::make_transform_iterator(ints.begin(), twice)
|
||||
, boost::make_transform_iterator(ints.end(), twice)
|
||||
, 3
|
||||
);
|
||||
test_distance(
|
||||
boost::make_transform_iterator(ints.end(), twice)
|
||||
, boost::make_transform_iterator(ints.begin(), twice)
|
||||
, -3
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
std::list<int> ints(ptr1, ptr2);
|
||||
test_distance(ints.begin(), ints.end(), 3);
|
||||
|
||||
test_distance(
|
||||
boost::make_transform_iterator(ints.begin(), twice)
|
||||
, boost::make_transform_iterator(ints.end(), twice)
|
||||
, 3
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
boost::container::slist<int> ints(ptr1, ptr2);
|
||||
test_distance(ints.begin(), ints.end(), 3);
|
||||
|
||||
test_distance(
|
||||
boost::make_transform_iterator(ints.begin(), twice)
|
||||
, boost::make_transform_iterator(ints.end(), twice)
|
||||
, 3
|
||||
);
|
||||
}
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
@ -11,6 +11,7 @@
|
||||
#include <iterator>
|
||||
#include <vector>
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/iterator/function_input_iterator.hpp>
|
||||
|
||||
namespace {
|
||||
@ -96,6 +97,23 @@ int main(int argc, char * argv[])
|
||||
assert(generated[i] == 42 + i);
|
||||
cout << "function iterator test with stateful function object successful." << endl;
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_LAMBDAS) && !defined(BOOST_NO_CXX11_AUTO_DECLARATIONS)
|
||||
// test the iterator with lambda expressions
|
||||
int num = 42;
|
||||
auto lambda_generator = [&num] { return num++; };
|
||||
vector<int>().swap(generated);
|
||||
copy(
|
||||
boost::make_function_input_iterator(lambda_generator, 0),
|
||||
boost::make_function_input_iterator(lambda_generator, 10),
|
||||
back_inserter(generated)
|
||||
);
|
||||
|
||||
assert(generated.size() == 10);
|
||||
for(std::size_t i = 0; i != 10; ++i)
|
||||
assert(generated[i] == 42 + i);
|
||||
cout << "function iterator test with lambda expressions successful." << endl;
|
||||
#endif // BOOST_NO_CXX11_LAMBDAS
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -33,37 +33,6 @@
|
||||
|
||||
using boost::dummyT;
|
||||
|
||||
struct mult_functor {
|
||||
typedef int result_type;
|
||||
typedef int argument_type;
|
||||
// Functors used with transform_iterator must be
|
||||
// DefaultConstructible, as the transform_iterator must be
|
||||
// DefaultConstructible to satisfy the requirements for
|
||||
// TrivialIterator.
|
||||
mult_functor() { }
|
||||
mult_functor(int aa) : a(aa) { }
|
||||
int operator()(int b) const { return a * b; }
|
||||
int a;
|
||||
};
|
||||
|
||||
template <class Pair>
|
||||
struct select1st_
|
||||
: public std::unary_function<Pair, typename Pair::first_type>
|
||||
{
|
||||
const typename Pair::first_type& operator()(const Pair& x) const {
|
||||
return x.first;
|
||||
}
|
||||
typename Pair::first_type& operator()(Pair& x) const {
|
||||
return x.first;
|
||||
}
|
||||
};
|
||||
|
||||
struct one_or_four {
|
||||
bool operator()(dummyT x) const {
|
||||
return x.foo() == 1 || x.foo() == 4;
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::deque<int> storage;
|
||||
typedef std::deque<int*> pointer_deque;
|
||||
typedef std::set<storage::iterator> iterator_set;
|
||||
|
@ -56,12 +56,24 @@ int main()
|
||||
STATIC_ASSERT_SAME(boost::pointee<X*>::type, X);
|
||||
STATIC_ASSERT_SAME(boost::pointee<X const*>::type, X const);
|
||||
|
||||
#if defined(BOOST_NO_CXX11_SMART_PTR)
|
||||
|
||||
STATIC_ASSERT_SAME(boost::pointee<std::auto_ptr<int> >::type, int);
|
||||
STATIC_ASSERT_SAME(boost::pointee<std::auto_ptr<X> >::type, X);
|
||||
|
||||
STATIC_ASSERT_SAME(boost::pointee<std::auto_ptr<int const> >::type, int const);
|
||||
STATIC_ASSERT_SAME(boost::pointee<std::auto_ptr<X const> >::type, X const);
|
||||
|
||||
#else
|
||||
|
||||
STATIC_ASSERT_SAME(boost::pointee<std::unique_ptr<int> >::type, int);
|
||||
STATIC_ASSERT_SAME(boost::pointee<std::unique_ptr<X> >::type, X);
|
||||
|
||||
STATIC_ASSERT_SAME(boost::pointee<std::unique_ptr<int const> >::type, int const);
|
||||
STATIC_ASSERT_SAME(boost::pointee<std::unique_ptr<X const> >::type, X const);
|
||||
|
||||
#endif
|
||||
|
||||
STATIC_ASSERT_SAME(boost::pointee<std::list<int>::iterator >::type, int);
|
||||
STATIC_ASSERT_SAME(boost::pointee<std::list<X>::iterator >::type, X);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include <boost/config.hpp>
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_HDR_TUPLE)
|
||||
#if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
||||
|
||||
#include <tuple>
|
||||
#include <boost/fusion/adapted/std_tuple.hpp>
|
||||
|
Reference in New Issue
Block a user