Issue Details (XML | Word | Printable)

Key: STDCXX-613
Type: Bug Bug
Status: Open Open
Priority: Major Major
Assignee: Unassigned
Reporter: Martin Sebor
Votes: 0
Watchers: 0
Operations

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

[MSVC 8.0] static const data members violate the ODR

Created: 24/Oct/07 05:56 PM   Updated: 24/Oct/07 05:56 PM
Return to search
Component/s: External
Affects Version/s: None
Fix Version/s: None

Time Tracking:
Not Specified

Environment: MSVC 7.0, 7.1, and 8.0

Regression: Regression
Severity: Linker Error


 Description  « Hide
Copied from Rogue Wave Bugzilla: http://bugzilla.cvo.roguewave.com/show_bug.cgi?id=1744

The program below illustrates that a definition of each static const integral data member of explicit specializations of class templates that are initialized in the body of the specialization is emitted by MSVC 7.0 in each translation unit that references the member. This is, of course, incorrect and leads to linker
errors.

$ cat t.cpp

template <class T>
struct S;

template <>
struct S<int>
{
static const int i = 0;
};

#ifndef MAIN

const int S<int>::i;

#else

int main ()
{
return S<int>::i;
}

#endif

$ cl -c -Fot.obj t.cpp && cl -c -DMAIN -Fomain.obj t.cpp && cl main.obj t.obj
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9344.1 for 80x86
Copyright (C) Microsoft Corporation 1984-2001. All rights reserved.
...
t.obj : error LNK2005: "public: static int const S<int>::i" (?i@?$S@H@@2HB) already defined in main.obj
main.exe : fatal error LNK1169: one or more multiply defined symbols found



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
No changes have yet been made on this issue.