mirror of
https://github.com/boostorg/iterator.git
synced 2025-07-18 23:22:11 +02:00
Reverted: 2e099caceb9..21102938e8ccb I'm going to reapply some of them soon, but it's easier to revert them all first, as there are conflicts. Also the number of changes that were inserted since then, mean that there would be a huge gap between related changes.
73 lines
2.4 KiB
C++
Executable File
73 lines
2.4 KiB
C++
Executable File
// Copyright David Abrahams 2004. Use, modification and distribution is
|
|
// subject to 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 <boost/pointee.hpp>
|
|
#include <boost/type_traits/add_const.hpp>
|
|
#include "static_assert_same.hpp"
|
|
#include <memory>
|
|
#include <list>
|
|
|
|
template <class T, class Ref>
|
|
struct proxy_ptr
|
|
{
|
|
typedef T element_type;
|
|
struct proxy
|
|
{
|
|
operator Ref() const;
|
|
};
|
|
proxy operator*() const;
|
|
};
|
|
|
|
template <class T>
|
|
struct proxy_ref_ptr : proxy_ptr<T,T&>
|
|
{
|
|
};
|
|
|
|
template <class T>
|
|
struct proxy_value_ptr : proxy_ptr<T,T>
|
|
{
|
|
typedef typename boost::add_const<T>::type element_type;
|
|
};
|
|
|
|
struct X {
|
|
template <class T> X(T const&);
|
|
template <class T> operator T&() const;
|
|
};
|
|
|
|
BOOST_TT_BROKEN_COMPILER_SPEC(X)
|
|
|
|
int main()
|
|
{
|
|
STATIC_ASSERT_SAME(boost::pointee<proxy_ref_ptr<int> >::type, int);
|
|
STATIC_ASSERT_SAME(boost::pointee<proxy_ref_ptr<X> >::type, X);
|
|
|
|
STATIC_ASSERT_SAME(boost::pointee<proxy_ref_ptr<int const> >::type, int const);
|
|
STATIC_ASSERT_SAME(boost::pointee<proxy_ref_ptr<X const> >::type, X const);
|
|
|
|
STATIC_ASSERT_SAME(boost::pointee<proxy_value_ptr<int> >::type, int const);
|
|
STATIC_ASSERT_SAME(boost::pointee<proxy_value_ptr<X> >::type, X const);
|
|
|
|
STATIC_ASSERT_SAME(boost::pointee<proxy_value_ptr<int const> >::type, int const);
|
|
STATIC_ASSERT_SAME(boost::pointee<proxy_value_ptr<X const> >::type, X const);
|
|
|
|
STATIC_ASSERT_SAME(boost::pointee<int*>::type, int);
|
|
STATIC_ASSERT_SAME(boost::pointee<int const*>::type, int const);
|
|
|
|
STATIC_ASSERT_SAME(boost::pointee<X*>::type, X);
|
|
STATIC_ASSERT_SAME(boost::pointee<X const*>::type, X const);
|
|
|
|
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);
|
|
|
|
STATIC_ASSERT_SAME(boost::pointee<std::list<int>::iterator >::type, int);
|
|
STATIC_ASSERT_SAME(boost::pointee<std::list<X>::iterator >::type, X);
|
|
|
|
STATIC_ASSERT_SAME(boost::pointee<std::list<int>::const_iterator >::type, int const);
|
|
STATIC_ASSERT_SAME(boost::pointee<std::list<X>::const_iterator >::type, X const);
|
|
return 0;
|
|
}
|