Fixes are available
APAR status
Closed as program error.
Error description
An implicit template instantiation with explicit specialization, using a pointer to a function with a default parameter is encountering an invalid error during compile. ===== TEST CASE ===== template <typename T> struct myTemplate { typedef T type; }; template <typename T> struct myTemplate<T *> { typedef T type; }; void defaultarg(int = 0); template <typename T> void templateFunction(T) { typedef typename myTemplate<T>::type template_type; } void test() { templateFunction(&defaultarg); } $ xlC -c test.cpp 1540-1111 (S) Only function declarations can have default arguments. "test.cpp", line 12.13: 1540-0700 (I) The previous message was produced while processing "struct myTemplate<void (*)(int)>". "test.cpp", line 10.6: 1540-0700 (I) The previous message was produced while processing "templateFunction<void (*)(int)>(void (*)(int))". "test.cpp", line 17.9: 1540-0700 (I) The previous message was produced while processing "test()". $
Local fix
The issue can be worked around by using an explicit template instantiation.
Problem summary
PROBLEM DESCRIPTION: Template argument deduction including default arguments in an invalid context. USERS AFFECTED: The problem is specific to the use of argument deduction when passing a function type to a template function, where the function type has a default argument.
Problem conclusion
The problem has been resolved.
Temporary fix
Comments
APAR Information
APAR number
IV33204
Reported component name
XL C/C++ AIX
Reported component ID
5724X1300
Reported release
B10
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2012-12-10
Closed date
2013-02-07
Last modified date
2013-02-08
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
XL C/C++ AIX
Fixed component ID
5724X1300
Applicable component levels
RB10 PSY U858036
UP C
Rate this page:
Average rating
Copyright and trademark information
IBM, the IBM logo and ibm.com are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at "Copyright and trademark information" at www.ibm.com/legal/copytrade.shtml.