Противоречивые объявления для шаблонов, статических переменных и прочего - PullRequest
1 голос
/ 14 сентября 2011

У меня есть этот исходный код, который я хочу скомпилировать в g ++ 4.4.5. Этот код правильно компилируется в Visual C ++ 2008, но не с g ++.

#include <iostream>

template<typename T, int MAXSIZE>
class ThreadSafePool
{
    typedef T theType;
};


template<int value>
class CNetPacket
{
    public:
            static const int s_max_pool_cnt=30;
    private:
            static ThreadSafePool<CNetPacket<value>, CNetPacket<value>::s_max_pool_cnt> s_packet_pool;
};

template<int value>
ThreadSafePool<CNetPacket<value>, CNetPacket<value>::s_max_pool_cnt> CNetPacket<value>::s_packet_pool;


int main()
{
    int temp = CNetPacket<300>::s_max_pool_cnt;
}

g ++ выдает это сообщение об ошибке:

test.cpp: 21: ошибка: конфликтующее объявление ThreadSafePool, CNetPacket :: s_max_pool_cnt> CNetPacket :: s_packet_pool

test.cpp: 16: ошибка: CNetPacket :: s_packet_pool имеет предыдущее объявление как ThreadSafePool, 30> CNetPacket :: s_packet_pool

test.cpp: 21: ошибка: объявление ThreadSafePool, 30> CNetPacket :: s_packet_pool вне класса не является определением

Любая помощь будет оценена. Спасибо.

1 Ответ

1 голос
/ 14 сентября 2011

Это прекрасно для меня с gcc 4.7 svn, gcc 4.6.1, gcc 4.5.3, gcc 4.3.4 и не работает с gcc 4.4.2

Я думаю, что это ошибка компилятора.*

...