Compare commits

..

69 Commits

Author SHA1 Message Date
a4c9c3eb65 Branch at revision 46530
[SVN r46531]
2008-06-19 18:57:10 +00:00
15a697f86b new jamfile to see warnings better
[SVN r46348]
2008-06-12 12:00:57 +00:00
dbef3564c4 fixes from Trac
[SVN r46346]
2008-06-12 10:54:44 +00:00
b948d9af17 fixes for problems from Trac
[SVN r46345]
2008-06-12 10:00:54 +00:00
95d424012b Quote href values - our tools don't support unquoted values.
[SVN r45283]
2008-05-11 13:49:20 +00:00
36a99eb0a0 test of updated as_literal()
[SVN r45124]
2008-05-05 06:42:30 +00:00
f117011b60 fix for as_literal()
[SVN r45123]
2008-05-05 06:41:54 +00:00
7c0d73b8cf fixed problem with operator()() when the value_type was abstract.
[SVN r43322]
2008-02-19 15:10:05 +00:00
405ebd8cca include config.hpp and workaround.hpp before uses of BOOST_WORKAROUND and BOOST_MSVC
[SVN r43220]
2008-02-11 03:48:41 +00:00
94b45ef51e missing ) fixed
[SVN r43175]
2008-02-08 15:25:01 +00:00
e115ac1006 silence of warnings for unused arguments
[SVN r43171]
2008-02-08 09:58:35 +00:00
8b712359a2 test
[SVN r43156]
2008-02-07 14:46:19 +00:00
428e72ed22 iterator_range disables msvc warning 4996
<http://svn.boost.org/trac/boost/ticket/1565>

[range] sub_range assignment issue
    <http://svn.boost.org/trac/boost/ticket/1284> 

[SVN r43155]
2008-02-07 14:41:04 +00:00
73db2a05b6 cleanup to pass inspection tool
[SVN r43135]
2008-02-06 23:12:21 +00:00
507d1e8075 fixed #if to #ifdef
[SVN r42715]
2008-01-13 11:37:41 +00:00
d31787daae doc fixes
[SVN r42693]
2008-01-12 12:38:57 +00:00
14a9a1906b Ticket #1477
[SVN r41638]
2007-12-03 09:08:02 +00:00
f65c137e73 missing include
[SVN r41636]
2007-12-03 09:00:23 +00:00
8085605217 fixed a serious oversigt
[SVN r41457]
2007-11-29 09:19:24 +00:00
0eb365edbe macro patch
[SVN r41183]
2007-11-17 21:24:16 +00:00
2e0d7eab4a removed some warnings
[SVN r41181]
2007-11-17 21:21:53 +00:00
637dc618d1 iostream macro patch
[SVN r41180]
2007-11-17 21:19:13 +00:00
dd1459f221 works after local test with vc8
[SVN r41177]
2007-11-17 20:44:29 +00:00
ba96d075b2 last updates
[SVN r41176]
2007-11-17 20:22:20 +00:00
a2f3a45214 minor update of comments
[SVN r41175]
2007-11-17 20:22:05 +00:00
6ac0cfe09c improved reference
[SVN r40968]
2007-11-09 15:15:28 +00:00
7b3857a9a8 minor tweaks to avoid warnings ... extension mechanism updated to follow new protocol
[SVN r40966]
2007-11-09 13:31:43 +00:00
2605b9ee45 update of new concepts, and replacement of range_size<T>::type with range_difference<T>::type throughut the library
[SVN r40965]
2007-11-09 13:30:57 +00:00
1509d5603b minor editorial issue
[SVN r40964]
2007-11-09 13:13:06 +00:00
93deddde63 major update wrt. new range concepts
[SVN r40962]
2007-11-09 10:27:42 +00:00
68a63cab85 added deprecated headers again for backward compatibility sake
[SVN r40629]
2007-10-31 21:48:11 +00:00
06c54ccd48 current version gave problem in regression ... to be updated later
[SVN r40612]
2007-10-30 19:47:40 +00:00
2e298b5e60 adds test for inclusion of concept header
[SVN r40521]
2007-10-28 10:11:54 +00:00
00e70244a5 fixes broken one from trunk ... still not finished
[SVN r40520]
2007-10-28 10:11:10 +00:00
3f98d69c94 added mfc/atl link
[SVN r40514]
2007-10-27 22:00:47 +00:00
4767db522b first update ... more to come
[SVN r40508]
2007-10-27 15:58:22 +00:00
f6e555dda3 updated example to new syntax
[SVN r40507]
2007-10-27 15:57:56 +00:00
01826978d6 cleaned up deprecated headers
[SVN r40506]
2007-10-27 15:57:20 +00:00
336c12b60f removed deprecated mfc stuff
[SVN r40425]
2007-10-24 15:53:54 +00:00
82768af3d2 roll-back of ADL names
[SVN r40423]
2007-10-24 15:19:16 +00:00
8984de1c74 roll back of ADL names
[SVN r40422]
2007-10-24 15:18:22 +00:00
4db083cd6d Shunsuke Sogame's MFC/ATL docs and tests
[SVN r40381]
2007-10-23 20:28:52 +00:00
f4cde208f2 Adding Shunsuke Sogame fantastic MFC/ATL mappings
[SVN r40379]
2007-10-23 20:23:05 +00:00
d130dff5ec cleanup
[SVN r40378]
2007-10-23 20:08:35 +00:00
aa9158b199 applied Ticket #1309 (new Patches)
[SVN r40377]
2007-10-23 19:56:39 +00:00
bbd9fdb7bd displabed some warnings and applied Ticket #1284: sub_range_copy.patch
[SVN r40376]
2007-10-23 19:50:59 +00:00
17514e1d44 added operator() to allow random access index with transform iterators
[SVN r40375]
2007-10-23 19:34:38 +00:00
d759c23552 added test for operator()
[SVN r40374]
2007-10-23 19:34:06 +00:00
cf9ad808a6 new fancy quickbook documentaion
[SVN r40373]
2007-10-23 19:12:19 +00:00
028bff0c22 changed ADL functions back the names of 1.34 ... these names have been in use for too long ... let's not break code that depends on them
[SVN r40372]
2007-10-23 19:07:38 +00:00
33a8016af3 change names of ADL functions back to 1.34 names ... the old names have been in use for too long so let's not break code that depends on them
[SVN r40371]
2007-10-23 19:06:39 +00:00
24466ae189 applied patch from Ticket #1302 (new Patches) to handle char arrays correctly
[SVN r40370]
2007-10-23 18:59:11 +00:00
c8ffe55ae5 added test for char array with nested null in response to Ticket #471
[SVN r40367]
2007-10-23 18:36:03 +00:00
a862a573df Applied patch from Ticket #1320
[SVN r40020]
2007-10-14 17:53:15 +00:00
0b0dfc0e06 Added missing boost namespace reference to as_literal.
[SVN r39683]
2007-10-04 11:51:51 +00:00
e0a76af0f9 Quiet unused argument warnings from gcc.
[SVN r39274]
2007-09-14 17:18:02 +00:00
51650f1aa2 Remove V1 Jamfiles
[SVN r38516]
2007-08-08 19:02:26 +00:00
aeb47120e3 fixed typo
[SVN r36684]
2007-01-10 18:57:20 +00:00
22b7b4ec8e commented out old array code
[SVN r36683]
2007-01-10 18:50:13 +00:00
a933622ae1 Allow building of shared versions of some Boost.Test libraries.
Adjust tests to use always use static linking to Boost.Test, since
linking to the shared version requires test changes.

Patch from Juergen Hunold.


[SVN r35989]
2006-11-10 19:09:56 +00:00
f49be0b382 *** empty log message ***
[SVN r35717]
2006-10-24 10:37:46 +00:00
007117cefb Merge in recent fixes for inspect errors.
[SVN r34973]
2006-08-27 10:40:36 +00:00
73bb3d899a *** empty log message ***
[SVN r34034]
2006-05-19 18:01:02 +00:00
4a8987865e dos2unix on some files
[SVN r34025]
2006-05-19 10:30:02 +00:00
f885495565 *** empty log message ***
[SVN r34015]
2006-05-18 21:27:29 +00:00
dc34cd6079 *** empty log message ***
[SVN r34014]
2006-05-18 21:11:55 +00:00
5850d7ce3e new traits and functions for v2
[SVN r34013]
2006-05-18 20:53:21 +00:00
554f832234 upgrade to v2
[SVN r34012]
2006-05-18 20:52:17 +00:00
dc96b440be v2 upgrade
[SVN r34011]
2006-05-18 19:17:04 +00:00
15 changed files with 107 additions and 75 deletions

View File

@ -19,7 +19,7 @@
<h2 >History and Acknowledgement</h2><a name="History" ></a>
<p >
The library was under way for a long time. Dietmar K<>hl originally intended
to submit an <code>array_traits</code> class template which had most of
to submit an <code >array_traits</code> class template which had most of
the functionality present now, but only for arrays and standard containers.
I believe this was back in 2001 or 2002.
</p>

View File

@ -24,7 +24,7 @@
to a somewhat clumsy use of the algorithms with redundant specification
of container names. Therefore we would like to raise the abstraction level
for algorithms so they specify their interface in terms of <a
href=range.html>Ranges</a> as much as possible.
href="range.html">Ranges</a> as much as possible.
</p>
<p>

View File

@ -53,7 +53,7 @@
<a href="range.html#bidirectional_range">Bidirectional Range</a> <li>
<a href="range.html#random_access_range">Random Access Range</a> </ul>
</ul>
Notice how we have used the categories from the <a href=../../iterator/doc/new-iter-concepts.html>new
Notice how we have used the categories from the <a href="../../iterator/doc/new-iter-concepts.html">new
style iterators</a>.
<p>

View File

@ -27,9 +27,9 @@
<ul>
<li>
Class <a href=#iter_range><code>iterator_range</code></a>
Class <a href="#iter_range"><code>iterator_range</code></a>
<li>
Class <a href=#sub_range><code>sub_range</code></a>
Class <a href="#sub_range"><code>sub_range</code></a>
</ul>
</ul>
@ -329,7 +329,7 @@ class can propagate constness since it knows what a corresponding
<span class=keyword>const </span><span class=identifier>value_type</span><span class=special>&amp; </span><span class=keyword>operator</span><span class=special>[]( </span><span class=identifier>difference_type </span><span class=identifier>at </span><span class=special>) </span><span class=keyword>const</span><span class=special>;</span>
<span class=keyword>public</span><span class=special>:
</span><span class=comment>// rest of interface inherited from <a href=#iter_range><code>iterator_range</code></a>
</span><span class=comment>// rest of interface inherited from <a href="#iter_range"><code>iterator_range</code></a>
</span><span class=special>};
</span>
<span class=special>} </span><span class=comment>// namespace 'boost'</span>

View File

@ -8,8 +8,8 @@
// For more information, see http://www.boost.org/libs/range/
//
#ifndef BOOST_RANGE_DETAIL_AS_LITERAL_HPP
#define BOOST_RANGE_DETAIL_AS_LITERAL_HPP
#ifndef BOOST_RANGE_AS_LITERAL_HPP
#define BOOST_RANGE_AS_LITERAL_HPP
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
@ -25,7 +25,9 @@
#include <boost/detail/workaround.hpp>
#include <cstring>
#ifndef BOOST_NO_CWCHAR
#include <cwchar>
#endif
namespace boost
{
@ -36,10 +38,12 @@ namespace boost
return strlen( s );
}
#ifndef BOOST_NO_INTRINSIC_WCHAR_T
inline std::size_t length( const wchar_t* s )
{
return wcslen( s );
}
#endif
//
// Remark: the compiler cannot choose between T* and T[sz]
@ -57,7 +61,7 @@ namespace boost
return true;
}
#ifndef BOOST_NO_INTRINSIC_WCHAR_T
inline bool is_char_ptr( wchar_t* )
{
return true;
@ -67,6 +71,7 @@ namespace boost
{
return true;
}
#endif
template< class T >
inline long is_char_ptr( T /* r */ )
@ -107,22 +112,13 @@ namespace boost
template< class Char, std::size_t sz >
inline iterator_range<Char*> as_literal( Char (&arr)[sz] )
{
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x590)) && __BORLANDC__ >= 0x590
return boost::make_iterator_range<Char*>( arr, arr + sz - 1 );
#else
return boost::make_iterator_range( arr, arr + sz - 1 );
#endif
return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );
}
template< class Char, std::size_t sz >
inline iterator_range<const Char*> as_literal( const Char (&arr)[sz] )
{
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x590)) && __BORLANDC__ >= 0x590
return boost::make_iterator_range<const Char*>( arr, arr + sz - 1 );
#else
return boost::make_iterator_range( arr, arr + sz - 1 );
#endif
return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );
}
}

View File

@ -73,15 +73,15 @@ namespace range_detail
// May this be discarded? Or is it needed for bad compilers?
//
template< typename T, std::size_t sz >
inline const T* range_begin( const T (&array)[sz] )
inline const T* range_begin( const T (&a)[sz] )
{
return array;
return a;
}
template< typename T, std::size_t sz >
inline T* range_begin( T (&array)[sz] )
inline T* range_begin( T (&a)[sz] )
{
return array;
return a;
}

View File

@ -8,8 +8,8 @@
// For more information, see http://www.boost.org/libs/range/
//
#ifndef BOOST_RANGE_AS_LITERAL_HPP
#define BOOST_RANGE_AS_LITERAL_HPP
#ifndef BOOST_RANGE_DETAIL_AS_LITERAL_HPP
#define BOOST_RANGE_DETAIL_AS_LITERAL_HPP
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once

View File

@ -25,6 +25,8 @@ namespace boost
{
namespace range_detail
{
template <typename T>
inline void boost_range_silence_warning( const T& ) { }
/////////////////////////////////////////////////////////////////////
// end() help
@ -82,12 +84,14 @@ namespace boost
template< class T, std::size_t sz >
inline std::size_t array_size( T BOOST_RANGE_ARRAY_REF()[sz] )
{
boost_range_silence_warning( boost_range_array );
return sz;
}
template< class T, std::size_t sz >
inline std::size_t array_size( const T BOOST_RANGE_ARRAY_REF()[sz] )
{
boost_range_silence_warning( boost_range_array );
return sz;
}

View File

@ -71,15 +71,15 @@ namespace range_detail
//////////////////////////////////////////////////////////////////////
template< typename T, std::size_t sz >
inline const T* range_end( const T (&array)[sz] )
inline const T* range_end( const T (&a)[sz] )
{
return range_detail::array_end<T,sz>( array );
return range_detail::array_end<T,sz>( a );
}
template< typename T, std::size_t sz >
inline T* range_end( T (&array)[sz] )
inline T* range_end( T (&a)[sz] )
{
return range_detail::array_end<T,sz>( array );
return range_detail::array_end<T,sz>( a );
}
#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \

View File

@ -11,8 +11,15 @@
#ifndef BOOST_RANGE_ITERATOR_RANGE_HPP
#define BOOST_RANGE_ITERATOR_RANGE_HPP
// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for Cray X1 patch.
#include <boost/config.hpp> // Define __STL_CONFIG_H, if appropriate.
#include <boost/detail/workaround.hpp>
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
#pragma warning( push )
#pragma warning( disable : 4996 )
#endif
// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for Cray X1 patch.
#ifndef BOOST_OLD_IOSTREAMS
# if defined(__STL_CONFIG_H) && \
!defined (__STL_USE_NEW_IOSTREAMS) && !defined(__crayx1) \
@ -21,12 +28,13 @@
# endif
#endif // #ifndef BOOST_OLD_IOSTREAMS
#include <boost/detail/workaround.hpp>
#include <boost/assert.hpp>
#include <boost/iterator/iterator_traits.hpp>
#include <boost/type_traits/is_abstract.hpp>
#include <boost/range/functions.hpp>
#include <boost/range/iterator.hpp>
#include <boost/range/difference_type.hpp>
#include <boost/iterator/iterator_traits.hpp>
#include <boost/assert.hpp>
#include <boost/utility/enable_if.hpp>
#include <iterator>
#include <algorithm>
#ifndef _STLP_NO_IOSTREAMS
@ -38,10 +46,6 @@
#endif // _STLP_NO_IOSTREAMS
#include <cstddef>
#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) || BOOST_WORKAROUND(BOOST_MSVC, == 1400)
#pragma warning( disable : 4996 )
#endif
/*! \file
Defines the \c iterator_class and related functions.
\c iterator_range is a simple wrapper of iterator pair idiom. It provides
@ -163,6 +167,12 @@ namespace boost
//! iterator type
typedef IteratorT iterator;
private: // for return value of operator()()
typedef BOOST_DEDUCED_TYPENAME
boost::mpl::if_< boost::is_abstract<value_type>,
reference, value_type >::type abstract_value_type;
public:
iterator_range() : m_Begin( iterator() ), m_End( iterator() )
#ifndef NDEBUG
, singular( true )
@ -351,7 +361,7 @@ namespace boost
// fails because it returns by reference. Therefore
// operator()() is provided for these cases.
//
value_type operator()( difference_type at ) const
abstract_value_type operator()( difference_type at ) const
{
BOOST_ASSERT( at >= 0 && at < size() );
return m_Begin[at];
@ -380,13 +390,15 @@ namespace boost
bool singular;
#endif
#ifndef NDEBUG
public:
bool is_singular() const
{
#ifndef NDEBUG
return singular;
}
#else
return false;
#endif
}
protected:
//
@ -639,5 +651,9 @@ namespace boost
#undef BOOST_OLD_IOSTREAMS
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
#pragma warning( pop )
#endif
#endif

View File

@ -11,18 +11,20 @@
#ifndef BOOST_RANGE_SUB_RANGE_HPP
#define BOOST_RANGE_SUB_RANGE_HPP
#include <boost/detail/workaround.hpp>
#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) || BOOST_WORKAROUND(BOOST_MSVC, == 1400)
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
#pragma warning( push )
#pragma warning( disable : 4996 )
#endif
#include <boost/detail/workaround.hpp>
#include <boost/range/config.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/range/value_type.hpp>
#include <boost/range/size_type.hpp>
#include <boost/range/difference_type.hpp>
#include <boost/assert.hpp>
#include <boost/type_traits/is_reference.hpp>
#include <boost/type_traits/remove_reference.hpp>
namespace boost
{
@ -42,11 +44,17 @@ namespace boost
typedef BOOST_DEDUCED_TYPENAME range_size<ForwardRange>::type size_type;
typedef BOOST_DEDUCED_TYPENAME base::reference reference;
public: // for return value of front/back
typedef BOOST_DEDUCED_TYPENAME
boost::mpl::if_< boost::is_reference<reference>,
const BOOST_DEDUCED_TYPENAME boost::remove_reference<reference>::type&,
reference >::type const_reference;
public:
sub_range() : base()
{ }
#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) || BOOST_WORKAROUND(BOOST_MSVC, == 1400)
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500) )
sub_range( const sub_range& r )
: base( static_cast<const base&>( r ) )
{ }
@ -112,7 +120,7 @@ namespace boost
return base::front();
}
const value_type& front() const
const_reference front() const
{
return base::front();
}
@ -122,7 +130,7 @@ namespace boost
return base::back();
}
const value_type& back() const
const_reference back() const
{
return base::back();
}
@ -132,7 +140,7 @@ namespace boost
return base::operator[](sz);
}
const value_type& operator[]( difference_type sz ) const
const_reference operator[]( difference_type sz ) const
{
return base::operator[](sz);
}
@ -163,5 +171,9 @@ namespace boost
} // namespace 'boost'
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
#pragma warning( pop )
#endif
#endif

View File

@ -22,7 +22,7 @@
</p>
<p>
Use, modification and distribution is subject to the Boost Software License, Version 1.0
(see <a href=http://www.boost.org/LICENSE_1_0.txt>
(see <a href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt</a>).
</p>

View File

@ -14,7 +14,7 @@ rule range-test ( name : includes * )
run $(name).cpp /boost/test//boost_unit_test_framework/<link>static
:
:
: $(includes)
: <toolset>gcc:<cxxflags>"-Wall -Wunused "
] ;
}

View File

@ -10,6 +10,8 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
#include <boost/range/detail/implementation_help.hpp>
#include <boost/test/test_tools.hpp>
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
# pragma warn -8091 // supress warning in Boost.Test
@ -30,7 +32,6 @@
#include <boost/static_assert.hpp>
#include <boost/type_traits.hpp>
#include <boost/test/test_tools.hpp>
#include <iostream>
#include <vector>
@ -91,6 +92,11 @@ void check_partial_workaround()
void check_partial_workaround()
{
//
// test if warnings are generated
//
std::size_t s = boost::range_detail::array_size( "foo" );
BOOST_CHECK_EQUAL( s, 4u );
}
#endif

View File

@ -137,14 +137,7 @@ void check_char()
BOOST_CHECK_EQUAL( str_end( char_s ), str_end1 );
BOOST_CHECK_EQUAL( str_empty( char_s ), (char_s == 0 || char_s[0] == char()) );
BOOST_CHECK_EQUAL( sz, std::char_traits<char>::length( char_s ) );
/*
BOOST_CHECK_EQUAL( str_begin( char_s2 ), char_s2 );
std::size_t sz2 = size( char_s2 );
const char* str_end12 = str_begin( char_s2 ) + sz;
BOOST_CHECK_EQUAL( str_end( char_s2 ), str_end12 );
BOOST_CHECK_EQUAL( empty( char_s2 ), (char_s2 == 0 || char_s2[0] == char()) );
BOOST_CHECK_EQUAL( sz2, std::char_traits<char>::length( char_s2 ) );
*/
BOOST_CHECK_EQUAL( str_begin( my_string ), my_string );
range_iterator<char_array_t>::type str_end2 = str_begin( my_string ) + str_size(my_string);
range_iterator<char_array_t>::type str_end3 = str_end(my_string);
@ -165,6 +158,20 @@ void check_char()
BOOST_CHECK( find_const( as_array( my_string ), to_search ) != str_end(my_string) );
BOOST_CHECK( find_const( as_array( my_const_string ), to_search ) != str_end(my_string) );
//
// Test that as_literal() always scan for null terminator
//
char an_array[] = "foo\0bar";
BOOST_CHECK_EQUAL( str_begin( an_array ), an_array );
BOOST_CHECK_EQUAL( str_end( an_array ), an_array + 3 );
BOOST_CHECK_EQUAL( str_size( an_array ), 3 );
const char a_const_array[] = "foobar\0doh";
BOOST_CHECK_EQUAL( str_begin( a_const_array ), a_const_array );
BOOST_CHECK_EQUAL( str_end( a_const_array ), a_const_array + 6 );
BOOST_CHECK_EQUAL( str_size( a_const_array ), 6 );
}
@ -172,9 +179,6 @@ void check_char()
void check_string()
{
check_char();
// check_char<volatile char>();
// check_char<const char>();
// check_char<const volatile char>();
#ifndef BOOST_NO_STD_WSTRING
typedef wchar_t* wchar_iterator_t;
@ -197,13 +201,7 @@ void check_string()
BOOST_CHECK_EQUAL( str_end(char_ws), (str_begin( char_ws ) + sz) );
BOOST_CHECK_EQUAL( str_empty( char_ws ), (char_ws == 0 || char_ws[0] == wchar_t()) );
BOOST_CHECK_EQUAL( sz, std::char_traits<wchar_t>::length( char_ws ) );
/*
std::size_t sz2 = size( char_ws2 );
BOOST_CHECK_EQUAL( str_begin( char_ws2 ), char_ws2 );
BOOST_CHECK_EQUAL( str_end( char_ws2 ), (begin( char_ws2 ) + sz2) );
BOOST_CHECK_EQUAL( empty( char_ws2 ), (char_ws2 == 0 || char_ws2[0] == wchar_t()) );
BOOST_CHECK_EQUAL( sz2, std::char_traits<wchar_t>::length( char_ws2 ) );
*/
wchar_t to_search = L'n';
BOOST_CHECK( find( char_ws, to_search ) != str_end(char_ws) );