This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] std::string::operator[] extension in debug mode



On May 19, 2005, at 3:14 PM, Gabriel Dos Reis wrote:


Jonathan Wakely <cow@compsoc.man.ac.uk> writes:

| On Thu, May 19, 2005 at 08:04:31PM +0200, Gabriel Dos Reis wrote:
|
| > A question I have is why conditionalizing the extern template stuff on
| > debug does not work.
|
| Because the lib was not built with debug, so the extern template
| instantiation (sans assertions) is always in the lib.


If the lib was not build with debug and user wants to use it as with
debug support, then user is in trouble he/she asked for.

The libstdc++ debug mode was specifically designed so that there is only one version of the compiled libstdc++ library, which may be linked with user applications that are compiled with -D_GLIBCXX_DEBUG and without (or even mixing code compiled with the different flags). Strong using and some tricky namespace work makes this possible. The problem is that basic_string<> permeates libstdc++ so much that we can't pull the same tricks that we do with, e.g., std::vector.


| If you disable
| extern templates your .o file includes an implicit instantiation (with
| assertions).


I think I understand that part.

| When you link to the lib you get ODR.

But you don't have to put it in the non-debug lib.

-- Gaby

With respect to -D_GLIBCXX_DEBUG, there is no "debug lib" and "non-debug lib"; just one lib that's compiled without _GLIBCXX_DEBUG defined.


Doug


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]