Hi Marcus,
                   Your explanation seems logical to me to if I 
understand it correctly. But I thought Microsoft's compiler are more 
strict about C++ standards although they don't comply too much with it. 
What it really means is that most of the times they will implement a 
super set of ISO standard. They generally have some extension which 
would not be part of the ISO standard , but apart from extensions rest 
will be more ISO complaint than say g++.

Thanks,
Divick



Marcus Lindblom wrote:
> Divick Kishore wrote:
>   
>> Hi Marcus,
>>                 thanks for the reply.
>>
>>     
>>>> Yes, the warning is totally ignorable. We've been running with it 
>>>> disabled for over a year now. :)
>>>>         
>> Still that does not answer why VC7 gives those errors ? From a language 
>> semantics perspective what really is wrong with that line?
>>     
>
> VC7.1 isn't very ISO C++ conformant, although it a lot better than it's 
> predecessors. I'm not 100% sure but I think that extern wasn't in the 
> standard when they released 7.1, hence the compiler warns that you are 
> using something that's not in the standard (Or the MSVC-dev team didn't 
> have time to fix it, VS71 is not exactly a thoroughly tested and 
> overworked product). The warning is quite nice, but since the compiler 
> has another slew of isses that are not standard which it doesn't warn 
> for, this one makes little sense.
>
> The 'extern' keyword was meant to be used to define that the template 
> specialization is instantiated in another compilation unit (i.e. 
> cpp-file), rather than the current one, to avoid code-bloat of each .cpp 
> generating code for, say, std::vector<int>. (This is reduced to one set 
> of machine-code by the linker, so it only affects the size of your 
> .obj-files.)
>
> So, this is all very nice in theory, but due to some issues with the 
> template instantiation mechanism (I can't remember the details, but I 
> think Herb Sutter wrote an article about it, search on www.gotw.ca) it 
> doesn't really work as intended anyway.
>
> I think Visual 8 gives the warning: "'extern' keyword not supported." 
> instead, but I'm not sure. I do know that neither VC7 nor VC8 implements 
> it properly (I recall reading it in the docs) and that you still get the 
> correct code (OpenSG runs fine on both VC7 and VC8), it justs take 
> longer to compile and link.
>
> When I want to do something like 'extern' and get results, I usually end 
> up with putting the template-source in the cpp-file and doing explicit 
> instantiation there, for all types that my executable will need. This 
> means two things: 1. no inlining. 2. all template functions get 
> instantiated, not just the ones that are used (this can be serious since 
> some of your templated class's functions might only compile with certain 
> types, etc.).
>
> Perhaps the gcc guys have managed to get it to work properly (or at 
> least for OpenSG's application thereof) so that would also explain the 
> difference in compile speed for OpenSG on *nix vs. windows/msvc, as well 
> as why extern is being used.
>
> Cheers,
> /Marcus
>
>
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> Opensg-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/opensg-users
>
>   


Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to