https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92446
Bug ID: 92446
Summary: [10, C++20] template argument deduction fails for
custom non-type parameters
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: dimitri.gorokhovik at free dot fr
Target Milestone: ---
g++ (GCC) 10.0.0 20191110 (experimental)
The below snippet fails, g++ fails to deduce the type of 'i'. The error
messages are different from those when failure is due to the custom type not
being structural. It works as expected for non-custom "old-style" NTTP (if
"BUG" is defined to 0).
/gcc-trunk/dist/bin/g++ -std=c++2a -c test-1.cpp
test-1.cpp: In function ‘int main()’:
test-1.cpp:19:18: error: no matching function for call to ‘f(qq)’
19 | return f (qq {});
| ^
test-1.cpp:14:20: note: candidate: ‘template<p i> int f(const pp<((const
p)i)>&)’
14 | template <p i> int f (pp <i> const &);
| ^
test-1.cpp:14:20: note: template argument deduction/substitution failed:
test-1.cpp:19:18: note: couldn’t deduce template parameter ‘i’
19 | return f (qq {});
| ^
#define BUG 1
#if BUG
struct p { unsigned p_ {}; };
#else
using p = unsigned;
#endif
template <p i> struct pp {};
struct qq : public pp <p {}> {};
template <p i> int f (pp <i> const &);
int main ()
{
return f (qq {});
};