Standard behaviour ?
From: Ares Lagae (ares_at_cs.kuleuven.ac.be)
Date: 11/26/03
- Next message: Frank Schmitt: "Re: Communication between a C++ and Java program?"
- Previous message: lilburne: "Re: Iterating over values in an enum"
- Next in thread: Ares Lagae: "Re: Standard behaviour ?"
- Reply: Ares Lagae: "Re: Standard behaviour ?"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Wed, 26 Nov 2003 14:46:38 +0100
Could someone please tell me what the behaviour of the following code
snippet is, according to the C++ standard ?
--------------------------------------------------------------------------
#include <iostream>
template <class T>
class Foo
{
public:
T m_f;
Foo(T f) : m_f(f) {}
//Foo(const Foo & foo) : m_f(foo.m_f) {}
static const Foo CONST;
};
template <class T>
const Foo<T> Foo<T>::CONST = Foo(T(1));
class Bar
{
public:
Foo<float> m_foo;
Bar() : m_foo(Foo<float>::CONST)
{
std::cout << "Foo.m_f = " << m_foo.m_f << std::endl;
}
};
Bar bar;
int main(int argc, char * argv[])
{
Bar bar;
return 0;
}
--------------------------------------------------------------------------------
On some compilers it prints "0 1", as if the static constant was not
initialized the first time, and on some compilers it prints "1 1".
I *think* (i hope not, but i could be wrong here) than the standard
behaviour is to print "1 1".
If this is in fact the case, there is a bug in each version of the MS C
compiler (tested with MSVC 6.0 and MSVC 7.0), the Intel compiler (tested
with ICC7.0/win), and in some versions of GCC (with gcc 3.3 it does
seems to work). If this is in fact a bug, is this bug known ?
Best regards,
Ares Lagae
- Next message: Frank Schmitt: "Re: Communication between a C++ and Java program?"
- Previous message: lilburne: "Re: Iterating over values in an enum"
- Next in thread: Ares Lagae: "Re: Standard behaviour ?"
- Reply: Ares Lagae: "Re: Standard behaviour ?"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|