// Be sure to respect LWG 198:
// http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#198
+// LWG 198 was superseded by LWG 2360
+// http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2360
#include <iterator>
#include <cassert>
};
template <class It>
-class weird_iterator
-{
- It it_;
-public:
- typedef It value_type;
- typedef std::bidirectional_iterator_tag iterator_category;
- typedef std::ptrdiff_t difference_type;
- typedef It* pointer;
- typedef It& reference;
-
- weird_iterator() {}
- explicit weird_iterator(It it) : it_(it) {}
- ~weird_iterator() {it_ = It();}
-
- reference operator*() {return it_;}
-
- weird_iterator& operator--() {return *this;}
-};
-
-template <class It>
void
test(It i, typename std::iterator_traits<It>::value_type x)
{
int main()
{
- test(weird_iterator<A>(A()), A());
A a;
test(&a+1, A());
}