stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Sebor (JIRA)" <>
Subject [jira] Created: (STDCXX-613) [MSVC 8.0] static const data members violate the ODR
Date Wed, 24 Oct 2007 17:57:50 GMT
[MSVC 8.0] static const data members violate the ODR

                 Key: STDCXX-613
             Project: C++ Standard Library
          Issue Type: Bug
          Components: External
         Environment: MSVC 7.0, 7.1, and 8.0
            Reporter: Martin Sebor

Copied from Rogue Wave Bugzilla:

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

$ cat t.cpp

template <class T>
struct S;

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

#ifndef MAIN

const int S<int>::i;


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


$ 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

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message