[Bug c++/71007] New: Divergence between treatment of char[0] between OR (=> SFINAE failure) and diagnostic printing (no failure)
schaub.johannes at googlemail dot com
gcc-bugzilla@gcc.gnu.org
Sun May 8 11:41:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71007
Bug ID: 71007
Summary: Divergence between treatment of char[0] between OR (=>
SFINAE failure) and diagnostic printing (no failure)
Product: gcc
Version: 6.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: schaub.johannes at googlemail dot com
Target Milestone: ---
The following is supposed to tell the user that char[0] is an invalid type,
during diagnostic printing. But instead, it infinitely recurses up to SIZE_MAX
or something during printing the diagnostic message, eventually crashing
#include <utility>
#include <tuple>
template<typename T, T ...I>
auto ignore_n(std::integer_sequence<T, I...>) {
return std::make_tuple((I, std::ignore)...);
}
template<typename... Ts>
auto function(Ts... ts)
-> decltype((std::tuple_cat(
ignore_n(std::make_index_sequence<sizeof(char[int(sizeof...(Ts))-1])-1> ()),
std::tuple<double, bool>()) = std::forward_as_tuple(ts...)),
void())
{
}
int main() {
function(2);
function(1, 2, 3);
}
Reduced test-case. Here it prints nothing when detailing on why "function" is
not callable:
main.cpp: In function 'int main()':
main.cpp:9:7: error: no matching function for call to 'f(char [1])'
f(x);
^
main.cpp:4:6: note: candidate: template<int N, class T> void f(char (&)[N])
void f(char(&)[N])
^
main.cpp:4:6: note: template argument deduction/substitution failed:
More information about the Gcc-bugs
mailing list