stdcxx-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Travis Vitek (Commented) (JIRA)" <>
Subject [jira] [Commented] (STDCXX-1055) some of the localization class declarations do not follow the ISO/IEC:14882:2003 specification
Date Mon, 06 Feb 2012 23:30:59 GMT


Travis Vitek commented on STDCXX-1055:


I can most definitely tell if the base class destructor is virtual or not. Invoking a function
(including the destructor) via base class pointer or reference will invoke the derived class
version of that function if it is virtual. This is the basis for polymorphism in C++, and
that is exactly what my testcase does.

My test shows two things.

# Other implementations of the C++ Standard Library don't have virtual destructors for these
# If someone were to write a class deriving from {{time_base}}, and their code relied on {{time_base}}
having a virtual destructor, the destructor for their derived class may not get called (if
it is deleted via a base class pointer).

As for making the destructors protected, I think Martin will agree (eventually) that they
should be (he did supply the testcase and fix for STDCXX-469 for a similar issue in {{std::locale::facet}}).
The issues that we are currently quibbling over is where in the inheritance tree the destructor
is supposed to be virtual and how to create a testcase that is well-formed and can verify
that the destructors in the derived classes are protected and not public or private.
> some of the localization class declarations do not follow the ISO/IEC:14882:2003 specification
> ----------------------------------------------------------------------------------------------
>                 Key: STDCXX-1055
>                 URL:
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 22. Localization
>    Affects Versions: 4.2.1, 4.2.2, 4.2.x, 4.3.x, 5.0.0
>         Environment: Solaris 10 and 11, Linux (RedHat and OpenSUSE), Sun C++ Compiler
12.1, 12.2, 12.3, GCC4.
> The defect is independent of platform or compiler.
>            Reporter: Stefan Teleman
>              Labels: conformance, standards
>             Fix For: 4.2.x, 4.3.x, 5.0.0
>         Attachments: stdcxx-1055.patch
> For the following classes:
> std::codecvt<> and its specializations
> std::collate<> and its specializations
> std::ctype<> and its specializations
> std::ctype_byname<> and its specializations
> std::messages<> and its specializations
> std::messages_byname<> and its specializations
> std::money_get<> and its specializations
> std::moneypunct<> and is specializations
> std::moneypunct_byname<> and its specializations
> std::money_put<> and its specializations
> std::num_get<> and its specializations
> std::numpunct<> and its specializations
> std::numpunct_byname<> and its specializations
> std::num_put<> and its specializations
> std::time_get<> and its specializations
> std::time_get_byname<> and its specializations
> std::time_put<> and its specializations
> 1. all these type declarations must be of class type (and not of struct type)
> 2. all these classes must have protected virtual destructors
> 3. all the corresponding *_base (time_base, money_base, etc), must have virtual destructors
> The current implementation of these types as structs (with default public access
> specifier on their non-virtual destructors) causes failures in Perennial CPPVS V8.1.
> Changing the access specifier for these destructors requires some changes in the
> stdcxx tests for localization.
> Patch based on 4.2.1 to follow shortly.

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:!default.jspa
For more information on JIRA, see:


View raw message