Issue Details (XML | Word | Printable)

Key: STDCXX-978
Type: Task Task
Status: In Progress In Progress
Priority: Major Major
Assignee: Eric Lemings
Reporter: Martin Sebor
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
C++ Standard Library

remove _RWSTD_NO_MEMBER_TEMPLATES and workarounds

Created: 28/Jun/08 11:18 PM   Updated: 22/Jul/08 10:50 PM
Return to search
Component/s: Configuration
Affects Version/s: 4.3.x
Fix Version/s: 4.3.0

Time Tracking:
Original Estimate: 6h
Original Estimate - 6h
Remaining Estimate: 6h
Remaining Estimate - 6h
Time Spent: Not Specified
Remaining Estimate - 6h


 Description  « Hide
Quoting from the following discussion:

Martin Sebor wrote:
> Travis Vitek wrote:
>>
>>
>>> Eric Lemings wrote:
>>>
>>>> Travis Vitek wrote:
>>>>
>>>>> Eric Lemings wrote:
>>>>>
>>>>> How about member templates? Are these unilaterally supported by all
>>>>> compilers now?
>>>>>
>>>> From below...
>>>>
>>>> _RWSTD_NO_INLINE_MEMBER_TEMPLATES /* not used at all */
>>> Well there's an INLINE_MEMBER_TEMPLATES.cpp check and then there's a
>>> separate MEMBER_TEMPLATES.cpp check. I assume they check different
>>> things.
>>
>> Yes, I realize this. The former checks that inline member templates are
>> supported. The latter checks that member templates can be defined
>> outside the body of the class.
>>
>> AFAICT, inline member templates are used in library code without guards,
>> so you can safely assume support for 4.2.x and later.
>>
>> If you want anything further than that [i.e. member templates defined
>> outside the body of the class, member template overloads, ...], you have
>> to look to see what all of the supported compilers allow. If one or more
>> of the currently supported compilers defines _RWSTD_NO_MEMBER_TEMPLATES,
>> then you will likely have to work around the issue in any new code. If
>> none of them define it, then some decision will have to be made if it is
>> safe to assume support for other compilers or not.
>
> Starting with 4.3.0, I think we can safely assume full support for
> member templates and remove all workarounds involving the macros
> as well as the macros (and the config test) themselves. The only
> thing I'd double-check before doing this cleanup is string when
> using HP aCC 3 because of an extern template bug.
>
> I don't even think there is a compiler that we target with 4.2.x
> that doesn't support member templates in any form. IIRC, the last
> one that had trouble with member templates (their out-of-line
> definitions) was MSVC 6.
>
> Martin



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Martin Sebor added a comment - 18/Jul/08 03:32 AM
Assigned to Brad.

Eric Lemings added a comment - 21/Jul/08 05:47 PM
I assume this issue also applies to _RWSTD_NO_MEMBER_TEMPLATE_OVERLOAD since it is only referenced in the <bitset> header.

Eric Lemings added a comment - 21/Jul/08 05:51 PM
Also I can find no config test or other conditions for which _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE is defined.

Martin Sebor added a comment - 21/Jul/08 06:30 PM - edited
This issue was meant to apply only to _RWSTD_NO_MEMBER_TEMPLATES. The _RWSTD_NO_MEMBER_TEMPLATE_OVERLOAD macro is #defined for a different limitation/bug. That being said, if none of the compilers on our test matrix #defines the macro feel free to remove it as well. To check, grep people.apache.org://www/stdcxx.dev.apache.org/builds/4.3.x/logs/*-cfg-h.gz.txt for the string "^ *# *define *_RWSTD_NO_MEMBER_TEMPLATE_OVERLOAD *"

The config test for _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE is TEMPLATE_ON_RETURN_TYPE.cpp.


Eric Lemings added a comment - 21/Jul/08 09:01 PM
Checked all log files in the {/www/stdcxx.dev.apache.org/builds/4.3.x/logs} directory. None of the macros {_RWSTD_NO_MEMBER_TEMPLATES}, {_RWSTD_NO_MEMBER_TEMPLATE_OVERLOAD}, and {_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE} are being defined. I'm leaving the return type macro untouched however since it is unrelated to this issue (unlike the overload macro).

Martin Sebor added a comment - 22/Jul/08 10:50 PM
This will not affect the 4.3.0 release but it does (or did until r678913) affect the 4.3.x branch, so replaced 4.3.0 with 4.3.x in Affects Version/s.