Fixes are available
March 2013 PTF for XL C/C++ for AIX, V12.1
XL C/C++ for AIX Fix Pack 4 (June 2013 PTF) for 12.1
XL C/C++ for AIX Fix Pack 5 (September 2013 PTF) for 12.1
XL C/C++ for AIX Fix Pack 7 (January 2014 PTF) for 12.1
XL C/C++ for AIX Fix Pack 8 (March 2014 PTF) for 12.1
XL C/C++ for AIX Fix Pack 11 (February 2015 PTF) for 12.1
XL C/C++ for AIX Fix Pack 12 (May 2015 PTF) for 12.1
XL C/C++ for AIX Fix Pack 13 (August 2015 Update) for 12.1
XL C/C++ for AIX Fix Pack 14 (December 2015 Update) for 12.1
XL C/C++ for AIX Fix Pack 15 (April 2016 Update) for 12.1
XL C/C++ for AIX Fix Pack 16 (July 2016 Update) for 12.1
XL C/C++ for AIX Fix Pack 17 (November 2016 Update) for 12.1
XL C/C++ for AIX Fix Pack 18 (February 2017 Update) for 12.1
XL C/C++ for AIX Fix Pack 19 (August 2017 Update) for 12.1
XL C/C++ for AIX Fix Pack 20 (March 2018 Update) for 12.1
XL C/C++ for AIX Fix Pack 6 (December 2013 PTF) for 12.1
XL C/C++ for AIX Fix Pack 9 (July 2014 PTF) for 12.1
XL C/C++ for AIX Fix Pack 10 (October 2014 PTF) for 12.1
XL C/C++ for AIX Fix Pack 21 (January 2019 Update) for 12.1
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
IV37950
Reported component name
XL C/C++ FOR AI
Reported component ID
5725C7200
Reported release
C10
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2013-03-12
Closed date
2013-03-12
Last modified date
2013-03-13
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++ FOR AI
Fixed component ID
5725C7200
Applicable component levels
Document Information
Modified date:
03 October 2021