B
Brian Ross
Hi,
I am having a problem writing a constructor/member initialization with
VC.NET7.1.
Here is the code:
---
namespace Library
{
template <typename T>
class LibraryTemplateT
{ };
}
namespace Module
{
class ModuleObject : public Library::LibraryTemplateT<int>
{
public:
ModuleObject() throw();
};
// [1] FAILS: error C2614: 'Module::ModuleObject' : illegal member
initialization: 'LibraryTemplateT' is not a base or member
// ModuleObject::ModuleObject() throw() : LibraryTemplateT()
// { }
// [2] FAILS: error C2059: syntax error : '<'
// ModuleObject::ModuleObject() throw() : LibraryTemplateT<int>()
// { }
// [3] WORKS
ModuleObject::ModuleObject() throw() : Library::LibraryTemplateT<int>()
{ }
}
---
The weird thing is that if LibraryTemplateT is a class and not a template
then I am able to use the first option above and not have to manually
specify the Library namespace. Also, all three choices work when trying them
online at http://www.comeaucomputing.com/tryitout/.
Since I have existing code that is using option [1] above for non-templates
I would like to know:
- Is the code illegal (for both templates and regular classes). ie. is
option [3] the only legal way to write that code (without having a using
declaration)?
- Are templates somehow special and get resolved differently?
- Is this a bug?
Thanks
I am having a problem writing a constructor/member initialization with
VC.NET7.1.
Here is the code:
---
namespace Library
{
template <typename T>
class LibraryTemplateT
{ };
}
namespace Module
{
class ModuleObject : public Library::LibraryTemplateT<int>
{
public:
ModuleObject() throw();
};
// [1] FAILS: error C2614: 'Module::ModuleObject' : illegal member
initialization: 'LibraryTemplateT' is not a base or member
// ModuleObject::ModuleObject() throw() : LibraryTemplateT()
// { }
// [2] FAILS: error C2059: syntax error : '<'
// ModuleObject::ModuleObject() throw() : LibraryTemplateT<int>()
// { }
// [3] WORKS
ModuleObject::ModuleObject() throw() : Library::LibraryTemplateT<int>()
{ }
}
---
The weird thing is that if LibraryTemplateT is a class and not a template
then I am able to use the first option above and not have to manually
specify the Library namespace. Also, all three choices work when trying them
online at http://www.comeaucomputing.com/tryitout/.
Since I have existing code that is using option [1] above for non-templates
I would like to know:
- Is the code illegal (for both templates and regular classes). ie. is
option [3] the only legal way to write that code (without having a using
declaration)?
- Are templates somehow special and get resolved differently?
- Is this a bug?
Thanks