"John Harrison" <john_andronicus@hotmail.com> wrote in message
news:bho2j5$1cqfp$1@ID-196037.news.uni-berlin.de...[color=blue]
>
> "Brian Ross" <brian.ross.x@rogers.com> wrote in message
> news:ZHL%a.212759$rsJ.76040@news04.bloor.is.net.ca ble.rogers.com...[color=green]
> > 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() :[/color]
> Library::LibraryTemplateT<int>()[color=green]
> > { }
> >
> > }
> > ---
> >
> > The weird thing is that if LibraryTemplateT is a class and not a[/color][/color]
template[color=blue][color=green]
> > 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[/color]
> them[color=green]
> > online at
http://www.comeaucomputing.com/tryitout/.
> >
> > Since I have existing code that is using option [1] above for[/color]
> non-templates[color=green]
> > 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
> >[/color]
>
> The following code compiles for me using VC++ 7.1
>
> namespace Library
> {
> template <typename T>
> class LibraryTemplateT
> { };
> }
> namespace Module
> {
> class ModuleObject : public Library::LibraryTemplateT<int>
> {
> public:
> ModuleObject() throw() {}
> };
> }
> int main()
> {
> Module::ModuleObject m;
> }
>
> Suggest you post the exact code you are having trouble with.[/color]
Hi,
I think you missed the part where I mentioned that I have tried your
combination and I know that it works (look at the comments in my sample
code). My question was more about why the other variations work when not
using templates and if that code is illegal.
Brian