A forward declaration used by template class issue on gcc 4.4.1
Zhang Lin
zhanglin0714@163.com
Fri Oct 23 18:35:00 GMT 2009
Hello,
I have encountered an issue when building ACE with MinGW and GCC 4.4.1.
The following example can reproduce the issue:
==========
main.cpp
==========
class ACE_Message_Queue_NT;
template<typename T>
class ACE_Message_Queue_Factory
{
public:
static ACE_Message_Queue_NT *create_NT_message_queue (int max_threads);
};
template <class T>
ACE_Message_Queue_NT *ACE_Message_Queue_Factory<T>::create_NT_message_queue (int max_threads)
{
ACE_Message_Queue_NT *tmp = 0;
tmp = new ACE_Message_Queue_NT (max_threads);
return tmp;
}
class ACE_Message_Queue_NT
{
public:
ACE_Message_Queue_NT (int)
{
}
};
int main(void)
{
ACE_Message_Queue_Factory<int>::create_NT_message_queue(100);
return 0;
}
This code can be accepted by Microsoft VC 7.1, but GCC reported the following error:
main.cpp: In static member function 'static ACE_Message_Queue_NT* ACE_Message_Queue_Factory<T>::create_NT_message_queue(int)':
main.cpp:15: error: invalid use of incomplete type 'struct ACE_Message_Queue_NT'
main.cpp:1: error: forward declaration of 'struct ACE_Message_Queue_NT'
Is there any description about the error above in C++ standard?
Thanks.
Best Regards,
Lin Zhang
2009-10-24
More information about the Gcc
mailing list