For better compatibility with recent versions of the GNU* C++ compiler, the Intel® C++ Compiler 9.1 for Linux has removed support for "named return value" and "implicit typename" extensions.
One of the more significant changes in GNU* G++ 3.3 is the removal of the implicit typename extension. The extension was deprecated in G++ 3.2, and elicited a warning at every use. In a template class, names from dependent bases are not visible when the template is definedthey are only looked up at instantiation time.
G++ had an extension that made names visible before instantiation, so G++ knew which were types and which were not. The standard requires that those that name a type be referred to using the typename keyword and qualified name.
The implicit typename feature is usually enabled in g++ mode, but should have been disabled in g++ mode when -gcc-version is >= 340. Having implicit typename enabled resulted in spurious errors when parsing nonclass template bodies. Now fixed.
The error message you would get looks like: " error: identifier "[xxx]" is undefined"
icpc -gcc-version=340 -c tst.cpp
Intel® C++ Compiler for Linux* - Implicit typename and named return value extension
For more complete information about compiler optimizations, see our Optimization Notice.