By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
454,894 Members | 1,382 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 454,894 IT Pros & Developers. It's quick & easy.

Initializing static const variables of template classes

P: n/a
I have 3 classes, 1 which does not use templates, CGood, and 2 which
do use templates, CBad, and COkay. I believe that all of them should
work, but only CGood and COkay are working for me. CBad fails to
compile.

class CGood
{
public:
typedef int arr_t[2];
static const arr_t bar;
};

const CGood::arr_t CGood::bar = { 1, 2 };

template <class T>
class CBad
{
public:
typedef T arr_t[2];
static const arr_t bar;
};

template <class T>
// g++ says ``error: expected initializer before 'CBad''':
const CBad<T>::arr_t CBad<T>::bar = { 1, 2 };

template <class T>
class COkay
{
public:
typedef T arr_t[2];
static const arr_t bar;
};

template <class T>
const T COkay<T>::bar[2] = { 1, 2 };

Can anyone tell me if there is something is wrong (or right) with
CBad? It seems fine to me, but the compiler just doesn't like it.

If it is helpful, here is my g++ version:

$ g++ --version
g++ (GCC) 4.1.1 (Gentoo 4.1.1-r3)

Mar 17 '07 #1
Share this Question
Share on Google+
1 Reply


P: n/a
Well, I just figured it out :-) Maybe someone will find this
useful...

On Mar 17, 1:17 am, "david.baird" <dhba...@gmail.comwrote:
template <class T>
// g++ says ``error: expected initializer before 'CBad''':
const CBad<T>::arr_t CBad<T>::bar = { 1, 2 };
Instead, use the typename keyword:

template <class T>
const typename CBad<T>::arr_t CBad<T>::bar = { 1, 2 };
This website says some nice things about typename (though I am still
trying to wrap my head around it):

http://www.gotw.ca/gotw/035.htm
GotW #35

Mar 17 '07 #2

This discussion thread is closed

Replies have been disabled for this discussion.