This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/30524] New: Template argument is not recognized as a Type inside a template function.
- From: "SSacek at appsecinc dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 21 Jan 2007 08:39:22 -0000
- Subject: [Bug c++/30524] New: Template argument is not recognized as a Type inside a template function.
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Perfectly valid C++ syntax causes a compiler error when used inside a template
function. Both the Sun compiler and Microsoft compiler have no trouble with the
sample code shown below. Notice that the same code inside the non-template
function succeeds in compiling just fine. The GCC compiler appears to have
trouble figuring out that the expression resolves into a normal data type. The
error I get from GCC is:
test23.cpp: In function `void THIS_FAILS(T)':
test23.cpp:19: error: type/value mismatch at argument 1 in template parameter
list for `template<class T> struct whatever'
test23.cpp:19: error: expected a type, got ` S<sizeof (func(var))>::type'
test23.cpp:19: error: invalid type in declaration before ';' token
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
template< typename T > struct whatever {};
template< int > struct S;
template<> struct S<1> { typedef char Array[ 1 ]; typedef char type; };
S<1>::Array& func( const char & );
void THIS_WORKS( char var )
{
whatever< S< sizeof( func( var ) ) >::type > temporary;
}
template< typename T >
void THIS_FAILS( T var )
{
whatever< S< sizeof( func( var ) ) >::type > temporary;
}
--
Summary: Template argument is not recognized as a Type inside a
template function.
Product: gcc
Version: 3.4.6
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: SSacek at appsecinc dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30524