Click here to Skip to main content
Click here to Skip to main content

WTL CString Class Implemented with the Standard C++ Library

By , 28 Sep 2006
 

Introduction

Before going any further, you should read CString-clone Using Standard C++: A Drop-In replacement for CString that builds on the Standard C++ Library's basic_string template by Joe O'Leary. You can get some more info about the CStdString here.

This article shows how CStdString, initially designed to replace the MFC CString, may as well smoothly replace WTL:CString, in any WTL project, including WinCE projects compiled with eVC4 SP4 or VS2005. The attached StdString.h is adapted from the last original revision dated 2005-Jan-10 for full WTL:CString and WinCE compliance.

The CStdString[X] classes

When including the attached StdString.h in your project, you access the class CStdString actually defined as either CStdStringA or CStdStringW, depending on your project Unicode/MBCS settings.

//  FILE:  StdString.h
//  Changes tagged with '// AR' copyright (c) Alain Rist 2006:
//  AUTHOR: Joe O'Leary (with outside help noted in comments) 
//... 

template <CT>class CStdStr : public std::basic_string<CT> 
//... 

typedef std::basic_string<TCHAR> tstring; 
//... 

typedef CStdStr<char> CStdStringA; // a better std::string 

typedef CStdStr<wchar_t> CStdStringW; // a better std::wstring 

typedef CStdStr<OLECHAR> CStdStringO; // almost always CStdStringW 

//... 

#ifdef UNICODE
     typedef CStdStringW CStdString; 
#else 
    typedef CStdStringA CStdString; 
//...

So, you have four CStdString[X] classes deriving from std::basic_string at your fingertips. Each can safely be static_casted to and from one of std::string or std::wstring.

Both character widths together

These classes have all possibly needed type constructors and assignment operators so that the following code will compile without errors and produce the same result in UNICODE and MBCS builds:

CStdString ss("My standard string"); // as with WTL::CString no _T() needed 

CStdStringW sw = ss; // no WTL::CStringW and WTL::CStringA available

CStdStringA sa = "àáâãäåæçèéêëìíîïñòóôõöøùúûüýþÿ";
sw = sa; // different character widths

Note that getting rid of the _T() macros may be very handy for lazy typers like me, but costs, at runtime, the price of conversion if both side types are different.

Same WTL::CString interface

As defined in the attached StdString.h, CStdString exposes all WTL::CString constructors, operators, and function members with one difference: the CStdString[X] constructors that take a character and a count takes them in the order (count, value), which is the opposite of the order WTL::CString(TCHAR ch, int nLength) declares them.

Except for this constructor, call on CStdString any WTL::CString member, operator, and (LPCTSTR) cast, for instance:

CStdString ss1(MAKEINTRESOURCE(IDR_MYID)); // construct from resource ID

ss1.LoadString(IDS_MYSTRING); // load from resource 

CWindow(hWnd).SetDlgItemText(ID_MYCONTROL, ss1); // use (LPCTSTR)cast

ss1.MakeLower(); // change content

CStdString ss2 = ss1.Right(1); // extraction

if (!ss1.IsEmpty()) // anything here?
    ss2.Replace(ss1[ss1.GetLength() -1], '?'); // just to play

CStdString integration in WTL projects

To use CStdString in WTL projects, unzip the WtlStdString.zip files to some place accessible by your compiler through angle brackets, and:

  • #include <StdString.h> in your project,
  • VS2005 or VC Express: #define _CRT_SECURE_NO_DEPRECATE before the inclusion of atlbase.h to avoid deprecation warnings.
  • WinCE projects: use only the eVC4 or VS2005 provided Standard C++ Library
    • eVC4 SP4: set the /GX compiler flag: enable unwind semantics for the C++ exception handler,
    • VS2005: patch the <Microsoft Visual Studio 8>\VC\ce\include\comdef.h line#3240 to:
    • int nLen = lstrlen(m_pszMsg);  // was ::lstrlen(m_pszMsg);

WTL CString support

WTL 7.0 and over is designed to support one of ATL::CString or WTL::CString depending on the compile time conditions, some macro definitions, and the inclusion order of the headers; ATL::CString comes with ATL version 7.0; and VC++7.0 and over, eVC, and VCExpress/Platform SDK use ATL 3.0 and do not get it.

The following rules apply when _ATL_NO_AUTOMATIC_NAMESPACE and _WTL_NO_AUTOMATIC_NAMESPACE are both undefined:

  1. WTL::CString is not compiled if you #define _WTL_NO_CSTRING before #include<atlmisc.h>
  2. You will get ATL::CString support if you #include<atlstr.h> before #include<atlapp.h>
  3. When ATL::CString is supported, WTL::CString should not be compiled.
  4. If rule 2 does not apply, you will get WTL::CString support for classes defined after #define _WTL_USE_CSTRING
  5. If rule 2 does not apply, you will get WTL::CString support for classes defined after #include<atlmisc.h>

Depending on rule 2, the _CSTRING_NS macro defined in atlapp.h will expand to ATL or WTL and silently map the application CString to WTL::CString or ATL::CString. So, we can write code like:

// MyWindow.h
// ...

CFindFile ff;
ff.FindFile(_T("C:*.*"));
CListBox lb = GetDlgItem(ID_MYLB);
//

CString sText = ff.GetFileName();
// actually returns a _CSTRING_NS::CString  

lb.GetText(0, sText);
// actually requires a _CSTRING_NS::CString&

// 

Plug-in CStdString as WTL::CString

To benefit the CStdString implementation of WTL::CString and WTL CString support, unzip WtlStdString.zip files to a directory accessible by your compiler through angle brackets. The included atlssmisc.h will:

  1. #include "StdString.h" (note the quoted file name),
  2. define or declare in the WTL namespace, a class CString built on ::CStdString,
  3. compile atlmisc.h without WTL::CString code but with WTL::CString support (using some #define hacking).

Note that atlssmisc.h relies on the implementation details in atlmisc.h and atlapp.h, so do not compile with WTL over version 7.5.

For existing projects using WTL::CString

Change #include <atlmisc.h> to #include <atlssmisc.h> in the headers, and check the CStdString integration in WTL projects requirements. That's all.

Experiment it with the WTL samples Alpha (Win32) and ImageView (WinCE).

For new projects

Paste the following template to stdafx.h, and adjust the commented lines for your needs.

/////////////////////////////////////////////////////////////
// Recommended stdafx.h layout
//...
// Change these values to use different versions
//...


#define _CRT_SECURE_NO_DEPRECATE // avoid StdString.h deprecation warnings

#include <atlbase.h>


//#include <atlstr.h>      // uncomment for WTL ATL::CString support


//#define _WTL_NO_CSTRING  // uncomment for WTL ATL::CString support 

                           // or no WTL CString suppport

//#define _WTL_USE_CSTRING // uncomment for CMenuT<> and CDCT<> 

                           // WTL::CString support


#include <atlapp.h>


extern CAppModule _Module;

#include <atlwin.h>


//#include <atlmisc.h> // uncomment AND comment next line for original 

                       // WTL:CString defintion

#include <atlssmisc.h> // CStdString based WTL:CString definition and support

//...

/////////////////////////////////////////////////////////////
  • With this exact layout, the project will have WTL::CString support except for CMenuT<>::GetMenuString() and CDCT<>::GetTextFace(), and WTL::CString will be declared as: typedef ::CStdString CString;.
  • If you uncomment #define _WTL_USE_CSTRING // ..., the project will have complete WTL::CString support, and WTL::CString will be defined as class CString: public ::CStdString.

For WinCE projects, check the CStdString integration in WTL projects requirements.

For existing projects using ATL::CString

Edit stdafx.h to get WTL::CString support, and #include <atlssmisc.h> first after atlwin.h. Check the CStdString integration in WTL projects requirements.

For instance, to plug CStdString based WTL::CString into the great Wizard97Test sample with a VC71 compiler, edit stdafx.h like this:

// stdafx.h: Wizard97Test WTL sample

//...

// Includes

#include "resource.h"

#include <atlbase.h>

/********************************* comment or cut from here
#if (_ATL_VER >= 0x0700)
#include <atlstr.h>
#include <atltypes.h>
#endif
// WTL related preprocessor definitions
#if (_ATL_VER >= 0x0700)
#define _WTL_NO_WTYPES
#define _WTL_NO_UNION_CLASSES
#define _WTL_NO_CSTRING
#endif
**************************************         to here   */
#define _WTL_NEW_PAGE_NOTIFY_HANDLERS
#include <atlapp.h>

extern CAppModule _Module;
#include <atlwin.h>

#include <atlcom.h>

#include <atlssmisc.h>     // instead of <atlmisc.h>

//...

Conclusion

There is some dispute about the compared efficiencies of std::basic_string, ATL::CString, and other implementations of stringish objects in C++. I will not argue there.

With CStdString based WTL::CString:

  • A WTL app linking external code based on std::basic_string will build with shared string implementation code.
  • Implementation of both character sizes (such as ANSI chars coming from a network in a Unicode app) is easier.
  • Old programmers like me, who followed the Fortran->Basic->C->C++->MFC->WTL path, may feel more comfortable with the CString interface when using std::string objects.

Thanks again to Joe O'Leary who did all the real work here, and enjoy WTL!

License

This article, along with any associated source code and files, is licensed under The Common Public License Version 1.0 (CPL)

About the Author

Alain Rist
France France
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralGreat!memberJoe O'Leary30 Oct '08 - 1:49 
I just want to say I think this is great. I should apologize for letting CStdString sit on the backburner and not being good about keeping it up to date. When I get back from vacation (sitting in an internet cafe on the west of Ireland right now), I need to take a closer look at this. It would be great to combine all this stuff together and have just one version of the code that did what people need.
 
-Joe
 
-Joe

GeneralRe: Great!memberAlain Rist30 Oct '08 - 20:31 
Thanks Joe Smile | :)
 
Joe O'Leary wrote:
It would be great to combine all this stuff together and have just one version of the code that did what people need.

 
It's up to you, let me know if I can help.
 
cheers,
AR
GeneralLoadStringW(...) fail in a Win32 Dinamic Link Library...membera.tess13 Mar '08 - 3:38 
Hello,
 
I'm coming back again. This new trouble is already in the same dll project. I have a trouble using the latest revision of StdString in a VC++ Visual Studio 2005.
The project is a Win32 dinamic link library (old name in the Visual Studio 6.0 env.) SDK
based (no support for MFC/ATL is wanted).
 
I add a new resource: string table that store only one string. In an exported dll function simply I try to load this string into a CStdString variable.
 
The code is very simèple:
 
// This is an example of an exported function.
CESTSNET_API int fnCeStsNet(void)
{
CStdString strHIName;
CStdString strName = _T("Paolo");
int intStrLen = 0;
 
intStrLen = strName.GetLength();
intStrLen = strHIName.LoadStringW(IDS_STR_102);
intStrLen = strHIName.GetLength();
 
OutputDebugString((LPCTSTR)strHIName);
return intStrLen;
}
 
The line:
strHIName.LoadStringW(IDS_STR_102);
return FALSE.
 
Someone can help me?
Thanks,
a.tess
GeneralRe: LoadStringW(...) fail in a Win32 Dinamic Link Library...memberAlain Rist13 Mar '08 - 12:17 
Looking at the code of CStdStr::LoadString() might help you to understand what happens.
 
This has no connection with my work. You should post in CString-clone Using Standard C++[^] forum.
AR
GeneralRe: LoadStringW(...) fail in a Win32 Dinamic Link Library...membera.tess13 Mar '08 - 22:49 
Hello Alain,
I try to debug wath happen in the function code.
If I need other help I will post on the other suggested link.
 
Thanks for your prompt answer.
a.tess
GeneralCompilation Troublemembera.tess11 Mar '08 - 0:36 
Hello,
I have a trouble using the latest revision of StdString in a VC++ Visual Studio 2005.
The project is a Win32 dinamic link library (old name in the Visual Studio 6.0 env.) SDK
based (no support for MFC/ATL is wanted).
I can't understtand why, but I collect a lot of errors and warnings during build process.
Please can someone help me to solve this issue?
Thanks,
a.tess
 
P.S.
A) the error and warnings detected:
 
1>------ Build started: Project: CeStsNet, Configuration: Debug Win32 ------
1>Compiling...
1>CeStsNet.cpp
1>d:\vc++ ver 7.0\cestsnet\cestsnet\stdstring.h(1727) : warning C4996: '_vsnprintf' was declared deprecated
1> c:\mvs8\vc\include\stdio.h(339) : see declaration of '_vsnprintf'
1> Message: 'This function or variable may be unsafe. Consider using _vsnprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
1>d:\vc++ ver 7.0\cestsnet\cestsnet\stdstring.h(1731) : warning C4996: '_vsnwprintf' was declared deprecated
1> c:\mvs8\vc\include\wchar.h(719) : see declaration of '_vsnwprintf'
1> Message: 'This function or variable may be unsafe. Consider using _vsnwprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
1>d:\vc++ ver 7.0\cestsnet\cestsnet\stdstring.h(2171) : warning C4311: 'type cast' : pointer truncation from 'const void *' to 'unsigned long'
1> d:\vc++ ver 7.0\cestsnet\cestsnet\stdstring.h(2167) : while compiling class template member function 'bool CStdStr<CT>::TryLoad(const void *)'
1> with
1> [
1> CT=char
1> ]
1> d:\vc++ ver 7.0\cestsnet\cestsnet\stdstring.h(4004) : see reference to class template instantiation 'CStdStr<CT>' being compiled
1> with
1> [
1> CT=char
1> ]
1>d:\vc++ ver 7.0\cestsnet\cestsnet\stdstring.h(2173) : warning C4311: 'reinterpret_cast' : pointer truncation from 'const void *' to 'unsigned long'
1>d:\vc++ ver 7.0\cestsnet\cestsnet\stdstring.h(2176) : warning C4311: 'reinterpret_cast' : pointer truncation from 'const void *' to 'unsigned long'
1>d:\vc++ ver 7.0\cestsnet\cestsnet\stdstring.h(2171) : warning C4311: 'type cast' : pointer truncation from 'const void *' to 'unsigned long'
1> d:\vc++ ver 7.0\cestsnet\cestsnet\stdstring.h(2167) : while compiling class template member function 'bool CStdStr<CT>::TryLoad(const void *)'
1> with
1> [
1> CT=wchar_t
1> ]
1> d:\vc++ ver 7.0\cestsnet\cestsnet\stdstring.h(4037) : see reference to class template instantiation 'CStdStr<CT>' being compiled
1> with
1> [
1> CT=wchar_t
1> ]
1>d:\vc++ ver 7.0\cestsnet\cestsnet\stdstring.h(2173) : warning C4311: 'reinterpret_cast' : pointer truncation from 'const void *' to 'unsigned long'
1>d:\vc++ ver 7.0\cestsnet\cestsnet\stdstring.h(2176) : warning C4311: 'reinterpret_cast' : pointer truncation from 'const void *' to 'unsigned long'
1>Linking...
1> Creating library D:\VC++ ver 7.0\CeStsNet\Debug\CeStsNet.lib and object D:\VC++ ver 7.0\CeStsNet\Debug\CeStsNet.exp
1>Embedding manifest...
1>Build log was saved at "file://d:\VC++ ver 7.0\CeStsNet\CeStsNet\Debug\BuildLog.htm"
1>CeStsNet - 0 error(s), 8 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
 
B) below a code portion where the CStdString object is used.
 
// CeStsNet.cpp : Defines the entry point for the DLL application.
//
 
#include "stdafx.h"
#include "CeStsNet.h"
 
// include here the stdstring module
#include "StdString.h"
 

#ifdef _MANAGED
#pragma managed(push, off)
#endif
 
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
 
#ifdef _MANAGED
#pragma managed(pop)
#endif
 
// This is an example of an exported variable
CESTSNET_API int nCeStsNet=0;
 
// This is an example of an exported function.
CESTSNET_API int fnCeStsNet(void)
{
CStdString strHIName = _T("");
 
return 42;
}
 
// This is the constructor of a class that has been exported.
// see CeStsNet.h for the class definition
CCeStsNet::CCeStsNet()
{
return;
}
GeneralRe: Compilation TroublememberAlain Rist11 Mar '08 - 0:50 
Please post your stdafx.h
 
cheers,
AR
GeneralRe: Compilation Troublemembera.tess11 Mar '08 - 1:19 
Thanks for yopur propt answer.
a.tess
 
P.S.
 
Below the stdafx.h.
 
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
 
#pragma once
 
// Modify the following defines if you have to target a platform prior to the ones specified below.
// Refer to MSDN for the latest info on corresponding values for different platforms.
#ifndef WINVER // Allow use of features specific to Windows XP or later.
#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows.
#endif
 
#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
#endif
 
#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
#endif
 
#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later.
#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE.
#endif
 
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
GeneralRe: Compilation TroublememberAlain Rist11 Mar '08 - 2:57 
In stdafx.h insert #define _CRT_SECURE_NO_DEPRECATE before #include <windows.h> (as indicated in the article).
This should suppress most of these annoying warnings. If some are left:
Move #include "StdString.h" before #include "CeStsNet.h"
Check that you applied SP1 to VS2005.
Check that you use the compiler provided Standard C++ library.
 
If you still get warnings after that, come back.
 
cheers,
AR
GeneralRe: Compilation Troublemembera.tess11 Mar '08 - 5:03 
Thanks for your answer.
The situation now is a little bit better. But I stil get back some warnings.
The SP1 is Installed. I can't find the "compiler provided" item, so I can't check the real value.
Please can you help me find this item?
 
Thanks for your help
a.tess
 
P.S.
Regarding the last warnings detected... below a list.
 

------ Rebuild All started: Project: CeStsNet, Configuration: Release Win32 ------
Deleting intermediate and output files for project 'CeStsNet', configuration 'Release|Win32'
Compiling...
stdafx.cpp
Compiling...
CeStsNet.cpp
d:\vc++ ver 7.0\cestsnet\cestsnet\StdString.h(2171) : warning C4311: 'type cast' : pointer truncation from 'const void *' to 'unsigned long'
d:\vc++ ver 7.0\cestsnet\cestsnet\StdString.h(2167) : while compiling class template member function 'bool CStdStr<CT>::TryLoad(const void *)'
with
[
CT=char
]
d:\vc++ ver 7.0\cestsnet\cestsnet\StdString.h(4004) : see reference to class template instantiation 'CStdStr<CT>' being compiled
with
[
CT=char
]
d:\vc++ ver 7.0\cestsnet\cestsnet\StdString.h(2173) : warning C4311: 'reinterpret_cast' : pointer truncation from 'const void *' to 'unsigned long'
d:\vc++ ver 7.0\cestsnet\cestsnet\StdString.h(2176) : warning C4311: 'reinterpret_cast' : pointer truncation from 'const void *' to 'unsigned long'
d:\vc++ ver 7.0\cestsnet\cestsnet\StdString.h(2171) : warning C4311: 'type cast' : pointer truncation from 'const void *' to 'unsigned long'
d:\vc++ ver 7.0\cestsnet\cestsnet\StdString.h(2167) : while compiling class template member function 'bool CStdStr<CT>::TryLoad(const void *)'
with
[
CT=wchar_t
]
d:\vc++ ver 7.0\cestsnet\cestsnet\StdString.h(4037) : see reference to class template instantiation 'CStdStr<CT>' being compiled
with
[
CT=wchar_t
]
d:\vc++ ver 7.0\cestsnet\cestsnet\StdString.h(2173) : warning C4311: 'reinterpret_cast' : pointer truncation from 'const void *' to 'unsigned long'
d:\vc++ ver 7.0\cestsnet\cestsnet\StdString.h(2176) : warning C4311: 'reinterpret_cast' : pointer truncation from 'const void *' to 'unsigned long'
Linking...
Creating library D:\VC++ ver 7.0\CeStsNet\Release\CeStsNet.lib and object D:\VC++ ver 7.0\CeStsNet\Release\CeStsNet.exp
Generating code
Finished generating code
Embedding manifest...
Build log was saved at "file://d:\VC++ ver 7.0\CeStsNet\CeStsNet\Release\BuildLog.htm"
CeStsNet - 0 error(s), 6 warning(s)
GeneralRe: Compilation TroublememberAlain Rist11 Mar '08 - 6:12 
This is in your doc:
 
Compiler Warning (level 1) C4311

Error Message
'variable' : pointer truncation from 'type' to 'type'
 

This warning detects 64-bit portability issues. For example, if code is compiled on a 64-bit platform, the value of a pointer (64 bits) will be truncated if it is assigned to an int (32 bits).
 
This warning is only issued when /Wp64 is used. See /Wp64 for more information. Also, see Rules for Using Pointers.

If you don't care for Win64 compatibility removing the /Wp64 flag from your project settings at Properties->C++->General will remove the warning.
 
If on the other hand you compile for 64 bit platforms, you should patch the StdString.h file as indicated at http://www.codeproject.com/KB/string/stdstring.aspx?msg=1370858#xx1370858xx[^].
 
The relevant line numbers in the article file are #385, #2165, #2175.
 
cheers,
AR
GeneralRe: Compilation Troublemembera.tess11 Mar '08 - 7:17 
Hello Alain,
 
following your suggestion finally I can build the project succesfully.
Thanks for your help.
Have a nice evening,
a.tess
GeneralPlease help me.membervijaydandi8 Feb '07 - 0:13 
Where u have defined sDst class.every where u have uses sDst.c_str().Please explain the need of it.
GeneralRe: Please help me.memberAlain Rist8 Feb '07 - 5:15 
Please, ask a question that I can understand.
AR
GeneralRe: Please help me.membervijaydandi8 Feb '07 - 17:05 
int CompareNoCase(PCMYSTR szThat) const
{
return ssicmp(this->c_str(), szThat);
}
i have reffered StdString.h.In that they have mention c_str()(above code) function what it will do.Where this function has defined.
 
else if ( pA >= sDst.c_str() && pA <= sDst.c_str() + sDst.size() )
 
In the above code what is sDst. where it has defined.
GeneralRe: Please help me.memberAlain Rist8 Feb '07 - 20:35 
Hi,
c_str() is a member function of:
template <class CharType,
   class Traits=char_traits<CharType>, 
   class Allocator=allocator<CharType> >
class basic_string;
for instance:
//...
std::basic_string<TCHAR>  str1("Hello world");
LPCTSTR pstr1 = str1.c_str();
//...
sDst is the destination formal parameter name in many functions.
You should learn C++ and ask this kind of question in the proper forum :http://www.codeproject.com/script/comments/forums.asp?forumid=1647[^]
cheers,
AR

QuestionWhy haven't you based it on the latest version of StdString.h ?memberDefenestration1 Oct '06 - 8:47 
Hi,
 
You mention that it's adapted from the last original revision dated 2005-JAN-10, but the latest version of Joe O Leary's StdString.h has a modified date of 2005-DEC-19.
 
Why haven't you used this version as the base ?
AnswerRe: Why haven't you based it on the latest version of StdString.h ?memberAlain Rist1 Oct '06 - 8:51 
Hi,
Defenestration wrote:
the latest version of Joe O Leary's StdString.h has a modified date of 2005-DEC-19.

I am not aware of this versionFrown | :(
How can I get it ?
cheers,
AR
 

GeneralRe: Why haven't you based it on the latest version of StdString.h ?memberDefenestration1 Oct '06 - 8:53 
From the StdString.h web page you linked to at the top of your article. Direct link is below:
 
http://home.earthlink.net/~jmoleary/code/StdString.zip[^]
QuestionRe: Why haven't you based it on the latest version of StdString.h ?memberAlain Rist1 Oct '06 - 8:59 
D'Oh! | :doh: I just downloaded again the file and found on line #95
// REVISION HISTORY
//
// 2005-JAN-10 - Thanks to Don Beusee for pointing out the danger in mapping
cheers
AR
AnswerRe: Why haven't you based it on the latest version of StdString.h ?memberDefenestration1 Oct '06 - 9:06 
The actual last revision date is 2005-DEC-19, as indicated by the modified date of the file. It's just that the revision history has not been updated with these changes.
 
It would appear that you've used this version anyway, so no probs. Smile | :)

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130523.1 | Last Updated 29 Sep 2006
Article Copyright 2006 by Alain Rist
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid