From 8a81d8b16cd4824aeea49468aaa078ba1bc0f2ee Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Mon, 7 Jan 2002 19:24:45 +0000 Subject: [PATCH] Workarounds for MSVC [SVN r12246] --- filter_iterator_example.cpp | 18 +++++++++++++----- reverse_iterator_example.cpp | 17 +++++++++++++---- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/filter_iterator_example.cpp b/filter_iterator_example.cpp index 6ca0605..f74f2e3 100644 --- a/filter_iterator_example.cpp +++ b/filter_iterator_example.cpp @@ -7,7 +7,6 @@ // "as is" without express or implied warranty, and with no claim as // to its suitability for any purpose. - #include #include #include @@ -20,9 +19,18 @@ struct is_positive_number { int main() { - int numbers[] = { 0, -1, 4, -3, 5, 8, -2 }; - const int N = sizeof(numbers)/sizeof(int); - + int numbers_[] = { 0, -1, 4, -3, 5, 8, -2 }; + const int N = sizeof(numbers_)/sizeof(int); + +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + // Assume there won't be proper iterator traits for pointers. This + // is just a wrapper for int* which has the right traits. + typedef boost::iterator_adaptor base_iterator; +#else + typedef int* base_iterator; +#endif + base_iterator numbers(numbers_); + // Example using make_filter_iterator() std::copy(boost::make_filter_iterator(numbers, numbers + N), boost::make_filter_iterator(numbers + N, numbers + N), @@ -30,7 +38,7 @@ int main() std::cout << std::endl; // Example using filter_iterator_generator - typedef boost::filter_iterator_generator::type + typedef boost::filter_iterator_generator::type FilterIter; is_positive_number predicate; FilterIter::policies_type policies(predicate, numbers + N); diff --git a/reverse_iterator_example.cpp b/reverse_iterator_example.cpp index 40c859f..b244855 100644 --- a/reverse_iterator_example.cpp +++ b/reverse_iterator_example.cpp @@ -10,17 +10,26 @@ int main(int, char*[]) { - char letters[] = "hello world!"; - const int N = sizeof(letters)/sizeof(char) - 1; + char letters_[] = "hello world!"; + const int N = sizeof(letters_)/sizeof(char) - 1; +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + // Assume there won't be proper iterator traits for pointers. This + // is just a wrapper for char* which has the right traits. + typedef boost::iterator_adaptor base_iterator; +#else + typedef char* base_iterator; +#endif + base_iterator letters(letters_); + std::cout << "original sequence of letters:\t" - << letters << std::endl; + << letters_ << std::endl; std::sort(letters, letters + N); // Use reverse_iterator_generator to print a sequence // of letters in reverse order. - boost::reverse_iterator_generator::type + boost::reverse_iterator_generator::type reverse_letters_first(letters + N), reverse_letters_last(letters);