https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84338
Bug ID: 84338
Summary: [8 Regression] sizeof...() returns always 1 in
variadic lambda inside a template
Product: gcc
Version: 8.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: benni.buch at gmail dot com
Target Milestone: ---
template < typename ... T >
auto f(T ... i){
[](auto ... i){
// // wrongly true in current trunk
// static_assert(sizeof...(i) == 1, "");
static_assert(sizeof...(i) == 2, "");
}(i ...);
}
int main(){
f(0, 1);
}
$ g++ -std=c++14 main.cpp
main.cpp: In instantiation of 'auto f(T ...) [with T = {int, int}]':
main.cpp:11:11: required from here
main.cpp:6:36: error: static assertion failed
static_assert(sizeof...(i) == 2, "");
~~~~~~~~~~~~~^~~~
$ g++ --version
g++ (GCC) 8.0.1 20180212 (experimental)
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Known to work in GCC 5 and GCC 6:
$ g++-6 -std=c++14 main.cpp
$ g++-6 --version
g++-6 (Ubuntu/Linaro 6.3.0-18ubuntu2~16.04) 6.3.0 20170519
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++-5 -std=c++14 main.cpp
$ g++-5 --version
g++-5 (Ubuntu 5.4.1-2ubuntu1~16.04) 5.4.1 20160904
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.