Re: Am I or Alexandrescu wrong about singletons?
DeMarcus wrote:
Hi,
I try to implement a simplified version of Alexandrescu's
Loki::SingletonHolder. See
http://loki-lib.sourceforge.net/html/a00670.html
row 717.
My code looks like this.
template<typename T>
class Singleton
{
public:
static T& getInstance()
{
return *instance_;
}
private:
typedef volatile T* SPtr;
static SPtr instance_;
};
template<typename T>
typename Singleton<T>::SPtr Singleton<T>::instance_;
int main()
{
typedef Singleton<int> S;
S::getInstance() = 4711;
}
But when I compile it with gcc 4.4.1 I get the following error message
at 'return *instance_;'.
"error: invalid initialization of reference of type 'int&' from
expression of type 'volatile int' "
What am I doing wrong?
"T&" designates the type "int&" , but "*instance" is an expression of type
"volatile int". You cannot refer to a volatile object by a non-volatile
expression. If you do nontheless by casting away volatile, behavior is
undefined. The compiler guards you from that by not allowing the non-
volatile reference to bind to expressions of volatile type.
I dunno what Alexandrescu's code is doing, but surely there are more levels
of indirections in his code that care for health :)
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]