public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/102044] New: another case of template function signature incorrectly dropping top-level cv-qualifier with function parameter of array of template function pointer
@ 2021-08-24 14:28 nickhuang99 at hotmail dot com
  2021-08-24 22:04 ` [Bug c++/102044] " pinskia at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: nickhuang99 at hotmail dot com @ 2021-08-24 14:28 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102044

            Bug ID: 102044
           Summary: another case of template function signature
                    incorrectly dropping top-level cv-qualifier with
                    function parameter of array of template function
                    pointer
           Product: gcc
           Version: 10.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nickhuang99 at hotmail dot com
  Target Milestone: ---

This may be dup case of PR102033, PR102034 and very probably not related with
PR102042 of which I just changed the function parameter of "g" to const array
instead of const reference of array. So, it can be another test case.

However, clang(https://www.godbolt.org/z/fxzoWK4G8) passes,
MSVC++(https://www.godbolt.org/z/c7Pfbr6b9) fails like GCC. In this sense, I
believe this case might be different from all above cases because MSVC++ does
not fail.

consider:

#include<type_traits>
template<unsigned int N, class T>
void f(const T[N]){}

template<unsigned int N, class T>
using fPtr=decltype(f<N,T>)*;

template<unsigned int N, class T>
fPtr<N,T> af[N]={&f<N,T>};

template<unsigned int N, class T>
void g(const decltype(af<N,T>)){}

static_assert(std::is_same<decltype(af<1,int>),
 fPtr<1,int>[1] >::value, "af is correct"); // #1

static_assert(std::is_same<decltype(g<1,int>),
 void(const fPtr<1,int>[1])>::value, "fun"); // #2

template<>
void g<1,int>(const fPtr<1,int>[1]){}


GCC says:

 error: template-id 'g<1, int>' for 'void g(void (* const*)(const int*))' does
not match any template declaration
   21 | void g<1,int>(const fPtr<1,int>[1]){}
      |      ^~~~~~~~
fun-array-value.cpp:12:6: note: candidate is: 'template<unsigned int N, class
T> void g(decltype (af<N, T>))'
   12 | void g(const decltype(af<N,T>)){}
      |      ^

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-10-25  9:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-24 14:28 [Bug c++/102044] New: another case of template function signature incorrectly dropping top-level cv-qualifier with function parameter of array of template function pointer nickhuang99 at hotmail dot com
2021-08-24 22:04 ` [Bug c++/102044] " pinskia at gcc dot gnu.org
2021-08-26 11:09 ` nickhuang99 at hotmail dot com
2021-10-15 21:00 ` cvs-commit at gcc dot gnu.org
2021-10-25  9:01 ` nickhuang99 at hotmail dot com

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).