This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/85864] New: template argument string literal operator with default argument doesnt work in templates
- From: "dummyddd at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 21 May 2018 19:53:43 +0000
- Subject: [Bug c++/85864] New: template argument string literal operator with default argument doesnt work in templates
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85864
Bug ID: 85864
Summary: template argument string literal operator with default
argument doesnt work in templates
Product: gcc
Version: 8.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: dummyddd at gmail dot com
Target Milestone: ---
The following code compiles with GCC 7.3.0 and earlier, but errors with GCC
8.1.0 and trunk.
template<class T, T... S> struct String_template {};
template<class C, C... S>
constexpr String_template<C, S...> operator""_template() {
return String_template<C, S...> {};
}
template<class prefix = decltype("0x"_template), class T>
int hex(T v) { return 1; }
template<int v>
void tt2() {
auto h2 = hex<decltype("0x"_template)>(1);
auto h = hex(2);
}
int main() {
auto h = hex(2);
return h;
}
<source>: In function 'void tt2()':
<source>:14:19: error: no matching function for call to 'hex(int)'
auto h = hex(2);
^
<source>:9:5: note: candidate: 'template<class prefix, class T> int hex(T)'
int hex(T v) { return 1; }
^~~
<source>:9:5: note: template argument deduction/substitution failed:
The error is only triggered by hex(2).
The error may be related to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85731