[Bug c++/84981] C++17 allows function pointers with no linkage as template parameters but gcc errors, stating the function has no linkage
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Mar 19 23:08:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84981
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |rejects-valid
Status|UNCONFIRMED |NEW
Last reconfirmed| |2018-03-19
Ever confirmed|0 |1
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Confirmed.
Without the lambda:
template<auto> struct X { };
void f()
{
struct Locale {
static void f() { }
};
X<&Locale::f> x;
}
c12.cc: In function 'void f()':
c12.cc:9:15: error: 'f()::Locale::f' is not a valid template argument for type
'void (*)()' because 'static void f()::Locale::f()' has no linkage
X<&Locale::f> x;
^
This seems to fix it:
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -6259,7 +6259,8 @@ convert_nontype_argument_function (tree type, tree expr,
}
linkage = decl_linkage (fn_no_ptr);
- if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external)
+ if ((cxx_dialect < cxx11 && linkage != lk_external)
+ || (cxx_dialect < cxx17 && linkage == lk_none))
{
if (complain & tf_error)
{
More information about the Gcc-bugs
mailing list