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